Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Let default checksum provider return DefaultRequestChecksumOverride
Browse files Browse the repository at this point in the history
This commit addresses #3465 (comment)
ysaito1001 committed Mar 8, 2024

Verified

This commit was signed with the committer’s verified signature.
nikukyugamer Osamu Takiya
1 parent 374ed2a commit 3c3843f
Showing 3 changed files with 21 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -60,7 +60,7 @@ impl Storable for RequestChecksumInterceptorState {
type Storer = StoreReplace<Self>;
}

pub(crate) type CustomDefaultFn = Box<
type CustomDefaultFn = Box<
dyn Fn(Option<ChecksumAlgorithm>, &ConfigBag) -> Option<ChecksumAlgorithm>
+ Send
+ Sync
33 changes: 19 additions & 14 deletions aws/rust-runtime/aws-inlineable/src/s3_express.rs
Original file line number Diff line number Diff line change
@@ -767,25 +767,30 @@ pub(crate) mod runtime_plugin {
}

pub(crate) mod checksum {
use crate::http_request_checksum::DefaultRequestChecksumOverride;
use aws_smithy_checksums::ChecksumAlgorithm;
use aws_smithy_types::config_bag::ConfigBag;

pub(crate) fn provide_default_checksum_algorithm(
original_checksum: Option<ChecksumAlgorithm>,
cfg: &ConfigBag,
) -> Option<ChecksumAlgorithm> {
// S3 does not have the `ChecksumAlgorithm::Md5`, therefore customers cannot set it
// from outside.
if original_checksum != Some(ChecksumAlgorithm::Md5) {
return original_checksum;
}

if crate::s3_express::utils::for_s3_express(cfg) {
// S3 Express requires setting the default checksum algorithm to CRC-32
Some(ChecksumAlgorithm::Crc32)
} else {
original_checksum
) -> crate::http_request_checksum::DefaultRequestChecksumOverride {
fn _provide_default_checksum_algorithm(
original_checksum: Option<ChecksumAlgorithm>,
cfg: &ConfigBag,
) -> Option<ChecksumAlgorithm> {
// S3 does not have the `ChecksumAlgorithm::Md5`, therefore customers cannot set it
// from outside.
if original_checksum != Some(ChecksumAlgorithm::Md5) {
return original_checksum;
}

if crate::s3_express::utils::for_s3_express(cfg) {
// S3 Express requires setting the default checksum algorithm to CRC-32
Some(ChecksumAlgorithm::Crc32)
} else {
original_checksum
}
}
DefaultRequestChecksumOverride::new(_provide_default_checksum_algorithm)
}
}

Original file line number Diff line number Diff line change
@@ -32,7 +32,6 @@ import software.amazon.smithy.rust.codegen.core.util.getTrait
import software.amazon.smithy.rustsdk.AwsCargoDependency
import software.amazon.smithy.rustsdk.AwsRuntimeType
import software.amazon.smithy.rustsdk.InlineAwsDependency
import software.amazon.smithy.rustsdk.awsInlineableHttpRequestChecksum

class S3ExpressDecorator : ClientCodegenDecorator {
override val name: String = "S3ExpressDecorator"
@@ -245,9 +244,6 @@ class S3ExpressRequestChecksumCustomization(
*preludeScope,
"ChecksumAlgorithm" to RuntimeType.smithyChecksums(runtimeConfig).resolve("ChecksumAlgorithm"),
"ConfigBag" to RuntimeType.configBag(runtimeConfig),
"DefaultRequestChecksumOverride" to
runtimeConfig.awsInlineableHttpRequestChecksum()
.resolve("DefaultRequestChecksumOverride"),
"Document" to RuntimeType.smithyTypes(runtimeConfig).resolve("Document"),
"for_s3_express" to s3ExpressModule(runtimeConfig).resolve("utils::for_s3_express"),
"provide_default_checksum_algorithm" to s3ExpressModule(runtimeConfig).resolve("checksum::provide_default_checksum_algorithm"),
@@ -262,9 +258,7 @@ class S3ExpressRequestChecksumCustomization(
if (checksumTrait.isRequestChecksumRequired) {
rustTemplate(
"""
${section.newLayerName}.store_put(#{DefaultRequestChecksumOverride}::new(
#{provide_default_checksum_algorithm}
));
${section.newLayerName}.store_put(#{provide_default_checksum_algorithm}());
""",
*codegenScope,
"customDefault" to

0 comments on commit 3c3843f

Please sign in to comment.