pub fn parse_request_head<'a>(
input: &'a [u8],
limits: &Limits,
fields: &'a mut [FieldSpan],
) -> Result<Parsed<ParsedRequest<'a>>, HttpError>Expand description
Parses one request head from the start of input, with exactly the
rules and budgets of ServerConn (the same scanner
and interpretation code), writing the field records into fields.
Allocates nothing.
It is stateless: given more input after Partial, it parses again from
the start. A caller that receives a head in many small pieces and needs
linear total work should use ServerConn, which resumes where it
stopped. A head with more fields than fields holds is
HttpError::TooManyHeaders (as is one over
Limits::max_headers).
§Errors
Every request parse error ServerConn::poll can return for a head
(UnexpectedEof aside: running out of input is Partial here).
§Examples
use http_net::{FieldSpan, Limits, Parsed, parse_request_head};
let input = b"POST /notes HTTP/1.1\r\nHost: a\r\nContent-Length: 5\r\n\r\nhello";
let mut fields = [FieldSpan::default(); 32];
let Parsed::Complete { head, len } = parse_request_head(input, &Limits::new(), &mut fields)? else {
panic!("incomplete");
};
let req = head.view();
assert_eq!(req.path(), "/notes");
assert_eq!(req.content_length(), Some(5));
assert_eq!(&input[len..], b"hello");