aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib.rs
AgeCommit message (Collapse)Author
2020-07-04Add license (GNU GPLv3+)Teddy Wing
2020-07-04Server::start: Return a `Server` directly instead of a `Result`Teddy Wing
We don't have any `Result`s to propagate in this function, so the `Result` return wrapper is unnecessary. Must have copied this signature from Civet without thinking: https://github.com/conduit-rust/rust-civet/blob/ab9c52ca634f65439060c2248295d2ac354aead5/src/lib.rs#L214
2020-07-04Add documentationTeddy Wing
Write doc comments for functions and types, and include a short example.
2020-07-04server: Log errorsTeddy Wing
Provide a mechanism to get detailed error messages when 500 internal server errors happen. We don't want to expose any detailed error information to clients, but it would be useful for administrators to know the cause of any errors.
2020-06-29Move `Server` code into a `server.rs` moduleTeddy Wing
2020-06-29Move request code to `request.rs`Teddy Wing
Want to separate request and server code.
2020-06-28Server::start: Implement `conduit::Body::File` responseTeddy Wing
2020-06-28Server::start(): Write HTTP version and status codeTeddy Wing
2020-06-28Server: Working `start()` implementationTeddy Wing
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.
2020-06-28FastCgiRequest::new: Remove unnecessary variableTeddy Wing
2020-06-28FastCgiRequest: Reorder `host` method implementationTeddy Wing
To match the struct field order.
2020-06-28FastCgiRequest: Implement `conduit::RequestExt` `body` methodTeddy Wing
Needed to change some things around to be able to use a mutable borrow for the `fastcgi::Stdin` body and an immutable borrow of `request` for all the other fields. Passed `fastcgi::Stdin` over through a `Read` implementation, because returning `&mut self.request.stdin()` was impossible, since the caller owns the `fastcgi::Stdin` reference.
2020-06-28FastCgiRequest: Add empty extensions map to implsTeddy Wing
2020-06-28FastCgiRequest: Add headers to `conduit::RequestExt`Teddy Wing
2020-06-28FastCgiRequest: Add content lengthTeddy Wing
2020-06-28FastCgiRequest: Add remote addrTeddy Wing
Seemed to make sense to add a new error type to group the parse errors together.
2020-06-27FastCgiRequest: Add query stringTeddy Wing
2020-06-27FastCgiRequest: Add request pathTeddy Wing
2020-06-27FastCgiRequest: Use a `None` `virtual_root`Teddy Wing
Looks like we don't need to implement this hopefully.
2020-06-27FastCgiRequest: Remove elidable `'b` lifetime in `conduit::RequestExt`Teddy Wing
Turns out I don't need this `'b` lifetime in the `conduit::RequestExt` `impl`. I had just assumed it was necessary because I copied it as `'a` from the "missing trait methods" error message.
2020-06-27FastCgiRequest: Start implementing `conduit::RequestExt`Teddy Wing
Was getting this error about the lifetimes in the trait impl: error[E0308]: method not compatible with trait --> src/lib.rs:137:4 | 137 | fn host(&'a self) -> conduit::Host<'a> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch | = note: expected fn pointer `fn(&'a FastCgiRequest<'static>) -> conduit::Host<'a>` found fn pointer `fn(&'a FastCgiRequest<'static>) -> conduit::Host<'a>` note: the lifetime `'a` as defined on the method body at 137:4... --> src/lib.rs:137:4 | 137 | fn host(&'a self) -> conduit::Host<'a> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ note: ...does not necessarily outlive the lifetime `'a` as defined on the impl at 124:6 --> src/lib.rs:124:6 | 124 | impl<'a> conduit::RequestExt for FastCgiRequest { | ^^ error[E0308]: method not compatible with trait --> src/lib.rs:137:4 | 137 | fn host(&'a self) -> conduit::Host<'a> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch | = note: expected fn pointer `fn(&'a FastCgiRequest<'static>) -> conduit::Host<'a>` found fn pointer `fn(&'a FastCgiRequest<'static>) -> conduit::Host<'a>` note: the lifetime `'a` as defined on the impl at 124:6... --> src/lib.rs:124:6 | 124 | impl<'a> conduit::RequestExt for FastCgiRequest { | ^^ note: ...does not necessarily outlive the lifetime `'a` as defined on the method body at 137:4 --> src/lib.rs:137:4 | 137 | fn host(&'a self) -> conduit::Host<'a> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Learned from these resources that the problem arose because the `impl` uses an `'a` lifetime, but the lifetime on the `host()` method need to be a different one: https://github.com/rust-lang/rust/issues/56423 https://stackoverflow.com/questions/24847331/rust-lifetime-error-expected-concrete-lifetime-but-found-bound-lifetime/24848424#24848424
2020-06-27FastCgiRequest: Add HTTP hostTeddy Wing
2020-06-27FastCgiRequest: Add `conduit::Scheme`Teddy Wing
2020-06-27FastCgiRequest: Add `conduit::Version`Teddy Wing
2020-06-27FastCgiRequest: Parse headers to a `conduit::HeaderMap`Teddy Wing
2020-06-27Create a wrapper struct for `fastcgi::Request`Teddy Wing
Trying out the Conduit API, as it seems like nice interface that I can plug the FastCGI server into. To do this, I need a server type, and some way to convert a `fastcgi::Request` into a `conduit::Request`. Doing this with a new local type that I can use to implement `conduit::RequestExt`.
2020-06-23run(): Convert `fastcgi::Request` to `http::Request`Teddy Wing
Build a new `http::Request` from the `fastcgi::Request` and pass it into the closure. Can't move `req`, so needed to change the `from` converter to take a reference. Update the example code to append the `http::Request` to a file for debugging and inspection.
2020-06-23From<fastcgi::Request>: Make a note to add the request bodyTeddy Wing
So far we only added metadata and headers to the request. We also need to include the body.
2020-06-23From<fastcgi::Request>: Convert HTTP headersTeddy Wing
The HTTP headers from `fastcgi` come with keys in the following format: "HTTP_USER_AGENT", "HTTP_ACCEPT_LANGUAGE". Since most headers use an uppercase first letter of a word with hyphen word separators, make the conversion by: 1. Removing the `HTTP_` prefix 2. Changing `_` to `-` 3. Making the first letter of each word uppercase using the Inflector crate
2020-06-23Start conversion from `fastcgi::Request` to `http::Request`Teddy Wing
Currently only converts the HTTP method and URI. Still need to convert HTTP headers.
2020-06-23Ideas for APITeddy Wing
I want a wrapper for `fastcgi::run()` that uses `http::Request` and `http::Response`. Add a `lighttpd.conf` to test the FastCGI. Print FastCGI params to give me an idea of what the request looks like.
2020-06-22Initialise new Rust v1.44.1 projectTeddy Wing
Created with: $ cargo init --lib