Skip to content

Commit

Permalink
[smithy-rs] Disallow @uniqueItems-constrained list shapes that reac…
Browse files Browse the repository at this point in the history
…h a map shape (#2375)

* Disallow `@uniqueItems`-constrained list shapes that reach a map shape

The server SDK codegen generates Rust code that does not compile when a
`@uniqueItems`-constrained list shape reaches a map shape, essentially
because `std::collections::HashMap` does not implement
`std::hash::Hash`.

A ticket with the Smithy team was opened in smithy-lang/smithy#1567 to
disallow such models.

This commit makes it so that codegen aborts with an informative message
when such models are encountered, instead of going ahead and producing
code that does not compile.

This commit also slightly adjusts the error messages produced when
unsupported constraint traits are found.

* ./gradlew ktlintFormat
  • Loading branch information
david-perez authored and aws-sdk-rust-ci committed Mar 30, 2023
1 parent c2deb0f commit 55d516a
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 23 deletions.
8 changes: 4 additions & 4 deletions sdk/kinesis/src/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -629,8 +629,8 @@ impl DeregisterStreamConsumerInput {
.set_endpoint(_config.endpoint_url
.clone())
.set_operation_type(Some("control".to_string()))
.set_stream_arn(self.stream_arn.clone())
.set_consumer_arn(self.consumer_arn.clone()).build()
.set_consumer_arn(self.consumer_arn.clone())
.set_stream_arn(self.stream_arn.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -1022,8 +1022,8 @@ impl DescribeStreamConsumerInput {
.set_endpoint(_config.endpoint_url
.clone())
.set_operation_type(Some("control".to_string()))
.set_consumer_arn(self.consumer_arn.clone())
.set_stream_arn(self.stream_arn.clone()).build()
.set_stream_arn(self.stream_arn.clone())
.set_consumer_arn(self.consumer_arn.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down
32 changes: 16 additions & 16 deletions sdk/s3control/src/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1103,8 +1103,8 @@ impl DeleteAccessPointInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_account_id(self.account_id.clone())
.set_access_point_name(self.name.clone()).build()
.set_access_point_name(self.name.clone())
.set_account_id(self.account_id.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -1661,8 +1661,8 @@ impl DeleteBucketInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_bucket(self.bucket.clone())
.set_account_id(self.account_id.clone()).build()
.set_account_id(self.account_id.clone())
.set_bucket(self.bucket.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -1965,8 +1965,8 @@ impl DeleteBucketPolicyInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_bucket(self.bucket.clone())
.set_account_id(self.account_id.clone()).build()
.set_account_id(self.account_id.clone())
.set_bucket(self.bucket.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -3177,8 +3177,8 @@ impl GetAccessPointInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_access_point_name(self.name.clone())
.set_account_id(self.account_id.clone()).build()
.set_account_id(self.account_id.clone())
.set_access_point_name(self.name.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -5921,8 +5921,8 @@ impl ListAccessPointsInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_account_id(self.account_id.clone())
.set_bucket(self.bucket.clone()).build()
.set_bucket(self.bucket.clone())
.set_account_id(self.account_id.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -6569,8 +6569,8 @@ impl ListRegionalBucketsInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_account_id(self.account_id.clone())
.set_outpost_id(self.outpost_id.clone()).build()
.set_outpost_id(self.outpost_id.clone())
.set_account_id(self.account_id.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -7014,8 +7014,8 @@ impl PutAccessPointPolicyInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_account_id(self.account_id.clone())
.set_access_point_name(self.name.clone()).build()
.set_access_point_name(self.name.clone())
.set_account_id(self.account_id.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down Expand Up @@ -7498,8 +7498,8 @@ impl PutBucketPolicyInput {
.clone())
.set_use_arn_region(_config.use_arn_region)
.set_requires_account_id(Some(true))
.set_bucket(self.bucket.clone())
.set_account_id(self.account_id.clone()).build()
.set_account_id(self.account_id.clone())
.set_bucket(self.bucket.clone()).build()
.map_err(|err|aws_smithy_http::endpoint::ResolveEndpointError::from_source("could not construct endpoint parameters", err));
let (endpoint_result, params) = match params_result {
Ok(params) => (_config.endpoint_resolver.resolve_endpoint(&params), Some(params)),
Expand Down
6 changes: 3 additions & 3 deletions versions.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
smithy_rs_revision = 'b9f8090ce8af2617d0ff33eb4e3a7cc6cc9e689a'
smithy_rs_revision = '198c500981e96fdb4f813725ce56a8ae98654f53'
aws_doc_sdk_examples_revision = '97a177aab8c3d2fef97416cb66e4b4d0da840138'

[manual_interventions]
Expand Down Expand Up @@ -1057,7 +1057,7 @@ model_hash = '9ec8a92782fbef7e2cf07fc9b5e656aa37b59668baff33acae10f270cfff4193'
[crates.aws-sdk-kinesis]
category = 'AwsSdk'
version = '0.25.0'
source_hash = '10c7ed41c53f7c89a31a1f784f3558ab8efd3c1a739264bfca8cf00d11e03def'
source_hash = '16c5293afed7f933dd6c3c92df4e30f737548f8ff752f893a40747ec8b8a3e25'
model_hash = '5eaef8321cea414140d87258e714988d88f3e41d9cdf4b83a1417027cb702cb9'

[crates.aws-sdk-kinesisanalytics]
Expand Down Expand Up @@ -1669,7 +1669,7 @@ model_hash = 'fb47cfd49cf2d9250063914599f703ed365b51be373988dc3f2cd64321c9583b'
[crates.aws-sdk-s3control]
category = 'AwsSdk'
version = '0.25.0'
source_hash = 'c5c8d15f89f55a8f31f1314e41113f106001b05958e6b3459dff061db88186e5'
source_hash = 'f8437504570dfa0691e15ca87deeae269580726ec1d78af29591c4932487dc1d'
model_hash = '930bd33c05c393293591ae01cbdb6637fb5062ed3a3ad5e2dadddd8108cc8478'

[crates.aws-sdk-s3outposts]
Expand Down

0 comments on commit 55d516a

Please sign in to comment.