async_http_codec/body/
common.rs1use anyhow::bail;
2use http::header::{CONTENT_LENGTH, TRANSFER_ENCODING};
3use http::HeaderMap;
4
5pub(crate) fn length_from_headers(headers: &HeaderMap) -> anyhow::Result<Option<u64>> {
6 let mut chunked = false;
7 for v in headers.get_all(TRANSFER_ENCODING) {
8 if v != "chunked" {
9 bail!("unsupported Transfer-Encoding: {:?}", v)
10 }
11 chunked = true;
12 }
13 if chunked {
14 Ok(None)
15 } else if let Some(v) = headers.get(CONTENT_LENGTH) {
16 Ok(Some(v.to_str()?.parse()?))
17 } else {
18 Ok(Some(0))
19 }
20}