Expand description
Easily create CGI (RFC 3875) programmes in Rust based on hyper’s http types.
Installation & Usage
Cargo.toml:
[dependencies]
rust_cgi = "0.3"
Use the cgi_main! macro, with a function that takes a rust_cgi::Request and returns a
rust_cgi::Response.
extern crate rust_cgi as cgi;
cgi::cgi_main! { |request: cgi::Request| -> cgi::Response {
cgi::text_response(200, "Hello World")
} }If your function returns a Result, you can use cgi_try_main!:
extern crate rust_cgi as cgi;
cgi::cgi_try_main! { |request: cgi::Request| -> Result<cgi::Response, String> {
let greeting = std::fs::read_to_string("greeting.txt").map_err(|_| "Couldn't open file")?;
Ok(cgi::text_response(200, greeting))
} }It will parse & extract the CGI environmental variables, and the HTTP request body to create
Request<u8>, call your function to create a response, and convert your Response into the
correct format and print to stdout. If this programme is not called as CGI (e.g. missing
required environmental variables), it will panic.
It is also possible to call the rust_cgi::handle function directly inside your main function:
ⓘ
extern crate rust_cgi as cgi;
fn main() { cgi::handle(|request: cgi::Request| -> cgi::Response {
cgi::empty_response(404)
})}Several shortcut functions are provided (such as html_response/binary_response)
Re-exports
pub extern crate http;
Macros
- Create a
mainfunction for a CGI script - Create a CGI main function based on a function which returns a
Result<rust_cgi::Response, _>
Functions
- Sends
blobwith that status code, and optional content type,Nonefor noContent-Typeheader to be set. - A HTTP Reponse with no body and that HTTP status code, e.g.
return rust_cgi::empty_response(404);to return a HTTP 404 Not Found. - Call a function as a CGI programme.
- Converts
textto bytes (UTF8) and sends that as the body with thatstatus_codeand HTMLContent-Typeheader (text/html) - Convert to a string and return that with the status code
- Serves this content as
text/plaintext response, with that status code
Type Aliases
- A
Vec<u8>Request from http - A
Vec<u8>Response from http