Encoders and decoders for HTTP/1.x messages based on [bytecodec] crate.
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::
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::