Crate async_scgi

Source
Expand description

Async SCGI Client & Server

This library will work with any async runtime that uses the futures-io library I/O traits.

This crate provides two main tools:

  • The ScgiRequest type to read & write SCGI requests.
  • The read_request function to read an SCGI request from a socket.

§Client Example

use async_scgi::{ScgiHeaders, ScgiRequest};

let mut stream = TcpStream::connect("127.0.0.1:12345").await?;
let mut headers = ScgiHeaders::new();
headers.insert("PATH_INFO".to_owned(), "/".to_owned());
headers.insert("SERVER_NAME".to_owned(), "example.com".to_owned());
let body = b"Hello world!";
let req = ScgiRequest {
    headers,
    body: body.to_vec(),
};
stream.write_all(&req.encode()).await?;
let mut resp = vec![];
stream.read_to_end(&mut resp).await?;
let resp_str = from_utf8(&resp)?;
println!("{}", resp_str);

§Server Example

let listener = TcpListener::bind("127.0.0.1:12345").await?;
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
    let mut stream = BufReader::new(stream?);
    let req = async_scgi::read_request(&mut stream).await?;
    println!("Headers: {:?}", req.headers);
    println!("Body: {}", from_utf8(&req.body).unwrap());
    stream.write_all(b"Hello Client!").await?;
}

Modules§

headers
Functions for working with SCGI headers directly.

Structs§

ScgiRequest
An SCGI request.

Enums§

ScgiReadError
An error that occurred while reading an SCGI request.

Functions§

read_request
Read an SCGI request.

Type Aliases§

ScgiHeaders
An ScgiRequest header map.