spacegate_kernel/utils/
with_length_or_chunked.rs1use crate::SgBody;
2use hyper::{body::Body, header::HeaderValue, Request, Response};
3
4const CHUNKED: &str = "chunked";
5#[allow(dead_code)]
6pub fn req_length_or_chunked(req: &mut Request<SgBody>) {
8 if let Some(len) = req.body().size_hint().exact() {
9 req.headers_mut().remove(hyper::header::TRANSFER_ENCODING);
10 req.headers_mut().insert(
11 hyper::header::CONTENT_LENGTH,
12 HeaderValue::from_str(len.to_string().as_str()).expect("digits should be valid header char"),
13 );
14 } else {
15 req.headers_mut().remove(hyper::header::CONTENT_LENGTH);
16 if let Some(len) = req.body().get_dumped().map(hyper::body::Bytes::len) {
17 req.headers_mut().remove(hyper::header::TRANSFER_ENCODING);
18 req.headers_mut().insert(
19 hyper::header::CONTENT_LENGTH,
20 HeaderValue::from_str(len.to_string().as_str()).expect("digits should be valid header char"),
21 );
22 } else if !req.headers().get_all(hyper::header::TRANSFER_ENCODING).iter().any(|v| v.as_bytes() == CHUNKED.as_bytes()) {
23 req.headers_mut().append(hyper::header::TRANSFER_ENCODING, HeaderValue::from_static(CHUNKED));
24 }
25 }
26}
27
28pub fn with_length_or_chunked(resp: &mut Response<SgBody>) {
30 if let Some(len) = resp.body().size_hint().exact() {
31 resp.headers_mut().remove(hyper::header::TRANSFER_ENCODING);
32 resp.headers_mut().insert(
33 hyper::header::CONTENT_LENGTH,
34 HeaderValue::from_str(len.to_string().as_str()).expect("digits should be valid header char"),
35 );
36 } else {
37 resp.headers_mut().remove(hyper::header::CONTENT_LENGTH);
38 if let Some(len) = resp.body().get_dumped().map(hyper::body::Bytes::len) {
39 resp.headers_mut().remove(hyper::header::TRANSFER_ENCODING);
40 resp.headers_mut().insert(
41 hyper::header::CONTENT_LENGTH,
42 HeaderValue::from_str(len.to_string().as_str()).expect("digits should be valid header char"),
43 );
44 } else if !resp.headers().get_all(hyper::header::TRANSFER_ENCODING).iter().any(|v| v.as_bytes() == CHUNKED.as_bytes()) {
45 resp.headers_mut().append(hyper::header::TRANSFER_ENCODING, HeaderValue::from_static(CHUNKED));
46 }
47 }
48}