Crate httpcodec [] [src]

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

Examples

Encodes a HTTP request message:

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.encode_all(&mut buf).unwrap();
assert_eq!(buf, "GET /foo HTTP/1.1\r\nContent-Length: 6\r\n\r\nbarbaz".as_bytes());

Decodes a HTTP response message:

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

let mut decoder =
    ResponseDecoder::<BodyDecoder<RemainingBytesDecoder>>::default();

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

assert_eq!(response.http_version(), HttpVersion::V1_0);
assert_eq!(response.status_code().as_u16(), 200);
assert_eq!(response.reason_phrase().as_str(), "OK");
assert_eq!(
    response.header()
        .fields()
        .map(|f| (f.name().to_owned(), f.value().to_owned()))
        .collect::<Vec<_>>(),
    vec![("Content-Length".to_owned(), "6".to_owned())]
);
assert_eq!(response.body(), b"barbaz");

References

  • RFC 7230 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

Structs

BodyDecoder

Basic HTTP body decoder.

BodyEncoder

Basic HTTP body encoder.

DecodeOptions

Options for request/response decoders.

HeadBodyEncoder

A body encoder mainly intended to be used for encoding HEAD responses.

Header

HTTP header.

HeaderField

HTTP header field.

HeaderFields

An iterator over the fields in a HTTP header.

HeaderMut

Mutable HTTP header.

Method

HTTP method.

NoBodyDecoder

A body decoder that consumes no bytes.

NoBodyEncoder

A body encoder that produces no bytes.

ReasonPhrase

Reason phrase of a response status.

Request

HTTP request message.

RequestDecoder

HTTP request decoder.

RequestEncoder

HTTP request encoder.

RequestTarget

Request target.

Response

HTTP response message.

ResponseDecoder

HTTP response decoder.

ResponseEncoder

HTTP response encoder.

StatusCode

Status code.

Enums

HttpVersion

HTTP version.

Traits

BodyDecode

BodyDecode is used for representing HTTP body decoders.

BodyEncode

BodyEncode is used for representing HTTP body encoders.