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