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.
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());Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
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.
