httpcodec

httpcodec Documentation Build Status Code Coverage License: MIT

Encoders and decoders for HTTP/1.x messages based on [bytecodec] crate.

Documentation

Examples

Encodes a HTTP request message:

```rust use bytecodec::Encode; use bytecodec::bytes::BytesEncoder; use bytecodec::io::IoEncodeExt; use httpcodec::{BodyEncoder, HttpVersion, Method, Request, RequestEncoder, RequestTarget};

let request = Request::new( Method::new("GET").unwrap(), RequestTarget::new("/foo").unwrap(), HttpVersion::V1_1, b"barbaz", );

let mut encoder = RequestEncoder::new(BodyEncoder::new(BytesEncoder::new())); encoder.start_encoding(request).unwrap();

let mut buf = Vec::new(); encoder.encodeall(&mut buf).unwrap(); asserteq!(buf, "GET /foo HTTP/1.1\r\nContent-Length: 6\r\n\r\nbarbaz".as_bytes()); ```

Decodes a HTTP response message:

```rust use bytecodec::bytes::RemainingBytesDecoder; use bytecodec::io::IoDecodeExt; use httpcodec::{BodyDecoder, HttpVersion, ResponseDecoder};

let mut decoder = ResponseDecoder::>::default();

let input = b"HTTP/1.0 200 OK\r\nContent-Length: 6\r\n\r\nbarbaz"; let response = decoder.decodeexact(input.asref()).unwrap();

asserteq!(response.httpversion(), HttpVersion::V10); asserteq!(response.statuscode().asu16(), 200); asserteq!(response.reasonphrase().asstr(), "OK"); asserteq!( response.header() .fields() .map(|f| (f.name().toowned(), f.value().toowned())) .collect::>(), vec![("Content-Length".toowned(), "6".toowned())] ); assert_eq!(response.body(), b"barbaz"); ```

References