From 20949f2295f553c0cc73b3a61d6b3e3ee9dbf74d Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 1 Nov 2022 12:42:45 -0400 Subject: [PATCH] fix(codegen): limit the Bucket param dedupe to S3 service (#626) --- .../HttpBindingProtocolGenerator.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java index 3d1f981a78e..ff8f1a03d6a 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -96,9 +97,7 @@ public abstract class HttpBindingProtocolGenerator implements ProtocolGenerator private final boolean isErrorCodeInBody; private final EventStreamGenerator eventStreamGenerator = new EventStreamGenerator(); private final LinkedHashMap headerBuffer = new LinkedHashMap<>(); - private final Set contextParamDeduplicationControlSet = SetUtils.of( - "Bucket" - ); + private Set contextParamDeduplicationParamControlSet = new HashSet<>(); /** * Creates a Http binding protocol generator. @@ -110,6 +109,14 @@ public HttpBindingProtocolGenerator(boolean isErrorCodeInBody) { this.isErrorCodeInBody = isErrorCodeInBody; } + /** + * Indicate that param names in the set should be de-duplicated when appearing in + * both contextParams (endpoint ruleset related) and HTTP URI segments / labels. + */ + public void setContextParamDeduplicationParamControlSet(Set contextParamDeduplicationParamControlSet) { + this.contextParamDeduplicationParamControlSet = contextParamDeduplicationParamControlSet; + } + @Override public final ApplicationProtocol getApplicationProtocol() { return APPLICATION_PROTOCOL; @@ -751,8 +758,8 @@ private void writeResolvedPath( // do not want to include it in the operation URI to be resolved. // We use this logic plus a temporary control-list, since it is not yet known // how many services and param names will have this issue. - - return !(isContextParam && contextParamDeduplicationControlSet.contains(content)); + return !(isContextParam + && contextParamDeduplicationParamControlSet.contains(content)); }) .map(Segment::toString) .collect(Collectors.joining("/"))