Get JSON message from input using the Content-Length header.
(input: &[u8])
| 568 | |
| 569 | /// Get JSON message from input using the Content-Length header. |
| 570 | fn parse_message(input: &[u8]) -> IResult<&[u8], &[u8]> { |
| 571 | let content_len = delimited(tag("Content-Length: "), digit1, crlf); |
| 572 | |
| 573 | let utf8 = alt((tag("utf-8"), tag("utf8"))); |
| 574 | let charset = tuple((char(';'), space0, tag("charset="), utf8)); |
| 575 | let content_type = tuple((tag("Content-Type: "), is_not(";\r"), opt(charset), crlf)); |
| 576 | |
| 577 | let header = terminated(terminated(content_len, opt(content_type)), crlf); |
| 578 | |
| 579 | let header = map_res(header, str::from_utf8); |
| 580 | let length = map_res(header, |s: &str| s.parse::<usize>()); |
| 581 | let mut message = length_data(length); |
| 582 | |
| 583 | message(input) |
| 584 | } |
| 585 | |
| 586 | fn find_next_message(input: &[u8]) -> IResult<&[u8], usize> { |
| 587 | map(take_until("Content-Length"), |s: &[u8]| s.len())(input) |