Skip to content

Commit

Permalink
s3s: ops: get_object: Transfer-Encoding (#81)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nugine authored Aug 30, 2023
1 parent 72940cb commit 803dc84
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
4 changes: 3 additions & 1 deletion codegen/src/ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -627,9 +627,11 @@ fn codegen_op_http_call(op: &Operation) {

if op.name == "GetObject" {
g!("resp.headers.extend(overrided_headers);");
g!("super::get_object::merge_custom_headers(&mut resp, s3_resp.headers);");
} else {
g!("resp.headers.extend(s3_resp.headers);");
}

g!("resp.headers.extend(s3_resp.headers);");
g!("resp.extensions.extend(s3_resp.extensions);");
g!("Ok(resp)");

Expand Down
2 changes: 1 addition & 1 deletion crates/s3s/src/ops/generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2558,7 +2558,7 @@ impl super::Operation for GetObject {
};
let mut resp = Self::serialize_http(s3_resp.output)?;
resp.headers.extend(overrided_headers);
resp.headers.extend(s3_resp.headers);
super::get_object::merge_custom_headers(&mut resp, s3_resp.headers);
resp.extensions.extend(s3_resp.extensions);
Ok(resp)
}
Expand Down
14 changes: 14 additions & 0 deletions crates/s3s/src/ops/get_object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ use crate::dto::GetObjectInput;
use crate::dto::Timestamp;
use crate::dto::TimestampFormat;
use crate::header;
use crate::http::Response;
use crate::utils::format::fmt_timestamp;
use crate::S3Request;
use crate::S3Result;

use hyper::header::CONTENT_LENGTH;
use hyper::header::TRANSFER_ENCODING;
use hyper::http::HeaderName;
use hyper::http::HeaderValue;
use hyper::HeaderMap;
Expand Down Expand Up @@ -42,3 +45,14 @@ fn add_ts(map: &mut HeaderMap<HeaderValue>, name: HeaderName, value: Option<&Tim
}
Ok(())
}

pub fn merge_custom_headers(resp: &mut Response, headers: HeaderMap<HeaderValue>) {
resp.headers.extend(headers);

// special case for https://github.com/Nugine/s3s/issues/80
if let Some(val) = resp.headers.get(TRANSFER_ENCODING) {
if val.as_bytes() == b"chunked" {
resp.headers.remove(CONTENT_LENGTH);
}
}
}

0 comments on commit 803dc84

Please sign in to comment.