Crate httpcodec

Source
Expand description

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.