Expand description
Easily create CGI (RFC 3875) programmes in Rust based on hyper’s http
types.
Installation & Usage
Cargo.toml
:
[dependencies]
cgi = "0.3"
Use the cgi_main!
macro, with a function that takes a cgi::Request
and returns a
cgi::Response
.
extern crate 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 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 cgi::handle
function directly inside your main
function:
ⓘ
extern crate 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
main
function for a CGI scriptCreate a CGI main function based on a function which returns a
Result<cgi::Response, _>
Functions
Sends
blob
with that status code, and optional content type, None
for no Content-Type
header to be set.A HTTP Reponse with no body and that HTTP status code, e.g.
return cgi::empty_response(404);
to return a HTTP 404 Not Found.Call a function as a CGI programme.
Converts
text
to bytes (UTF8) and sends that as the body with that status_code
and HTML
Content-Type
header (text/html
)Convert to a string and return that with the status code
Serves this content as
text/plain
text response, with that status code