ntex-httparse 2.2.0

A tiny, safe, speedy, zero-copy HTTP/1.x parser.
Documentation

ntex-httparse

crates.io Released API docs MIT licensed CI

A push parser for the HTTP 1.x protocol, used by ntex. Fork of httparse. Avoids allocations. No copy. Fast.

Works with no_std, simply disable the std Cargo feature.

Changelog

Usage

The request line and headers are parsed separately. Parsed parts are returned as positions into the buffer.

use ntex_httparse::{Header, HeaderParsed, Request, Status};

let mut req = Request::default();
let buf = b"GET /index.html HTTP/1.1\r\nHost";
let mut pos = req.parse(buf)?.unwrap();
assert_eq!(&buf[req.path.start..req.path.end], b"/index.html");

let mut header = Header::default();
// a partial header, so we try again once we have more data
assert!(header.parse(&buf[pos..])?.is_partial());

let buf = b"GET /index.html HTTP/1.1\r\nHost: example.domain\r\n\r\n";
while let Status::Complete(parsed) = header.parse(&buf[pos..])? {
    match parsed {
        HeaderParsed::Header(len) => pos += len,
        HeaderParsed::Eof(len) => {
            pos += len;
            break;
        }
    }
}
assert_eq!(pos, buf.len());

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.