Skip to content

Commit 0b6e601

Browse files
authored
Upgrade to Smithy 1.14.0 (#1488)
1 parent f349b7e commit 0b6e601

File tree

385 files changed

+72854
-7626
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

385 files changed

+72854
-7626
lines changed

codegen/protocol-test-codegen/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ plugins {
2020
}
2121

2222
dependencies {
23-
implementation("software.amazon.smithy:smithy-aws-protocol-tests:[1.6.0,1.10.0[")
23+
implementation("software.amazon.smithy:smithy-aws-protocol-tests:[1.14.0,1.15.0[")
2424
implementation(project(":smithy-aws-go-codegen"))
2525
}
2626

codegen/sdk-codegen/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import kotlin.streams.toList
2222

2323
buildscript {
2424
dependencies {
25-
"classpath"("software.amazon.smithy:smithy-aws-traits:[1.5.1,2.0.0[")
25+
"classpath"("software.amazon.smithy:smithy-aws-traits:[1.13.1,2.0.0[")
2626
}
2727
}
2828

codegen/smithy-aws-go-codegen/build.gradle.kts

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ tasks.withType<Test> {
3232
}
3333

3434
dependencies {
35-
api("software.amazon.smithy:smithy-aws-traits:[1.5.1,2.0.0[")
36-
api("software.amazon.smithy:smithy-aws-iam-traits:[1.6.1,2.0.0[")
37-
api("software.amazon.smithy:smithy-aws-cloudformation-traits:[1.8.0,2.0.0[")
35+
api("software.amazon.smithy:smithy-aws-traits:[1.14.0,2.0.0[")
36+
api("software.amazon.smithy:smithy-aws-iam-traits:[1.14.0,2.0.0[")
37+
api("software.amazon.smithy:smithy-aws-cloudformation-traits:[1.14.0,2.0.0[")
3838
api("software.amazon.smithy.go:smithy-go-codegen:0.1.0")
3939
testImplementation("org.junit.jupiter:junit-jupiter-api:5.4.0")
4040
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.0")

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsProtocolUtils.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import software.amazon.smithy.go.codegen.integration.HttpProtocolUnitTestResponseGenerator;
3030
import software.amazon.smithy.go.codegen.integration.IdempotencyTokenMiddlewareGenerator;
3131
import software.amazon.smithy.go.codegen.integration.ProtocolGenerator.GenerationContext;
32+
import software.amazon.smithy.model.shapes.Shape;
3233
import software.amazon.smithy.model.shapes.ShapeId;
3334
import software.amazon.smithy.utils.SetUtils;
3435

@@ -56,7 +57,7 @@ static void generateHttpProtocolTests(GenerationContext context) {
5657
writer.addUseImports(AwsGoDependency.AWS_CORE);
5758
writer.openBlock("$L(func(region string, options $L) (e aws.Endpoint, err error) {", "}),",
5859
EndpointGenerator.RESOLVER_FUNC_NAME, EndpointGenerator.RESOLVER_OPTIONS, () -> {
59-
writer.write("e.URL = url");
60+
writer.write("e.URL = serverURL");
6061
writer.write("e.SigningRegion = \"us-west-2\"");
6162
writer.write("return e, err");
6263
});
@@ -207,6 +208,13 @@ static void generateHttpProtocolTests(GenerationContext context) {
207208
.service(ShapeId.from("aws.protocoltests.json10#JsonRpc10"))
208209
.operation(ShapeId.from("aws.protocoltests.json10#EmptyInputAndEmptyOutput"))
209210
.addTestName("AwsJson10EmptyInputAndEmptyOutput")
211+
.build(),
212+
213+
// HTTP Payload Values that are unset vs set by the customer and how content-type should be handled.
214+
HttpProtocolUnitTestGenerator.SkipTest.builder()
215+
.service(ShapeId.from("aws.protocoltests.restjson#RestJson"))
216+
.operation(ShapeId.from("aws.protocoltests.restjson#TestPayloadBlob"))
217+
.addTestName("RestJsonHttpWithEmptyBlobPayload")
210218
.build()
211219
));
212220

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/RestJsonProtocolGenerator.java

+26-8
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
import java.util.Optional;
2525
import java.util.Set;
2626
import java.util.TreeSet;
27+
import java.util.function.Consumer;
2728
import java.util.function.Predicate;
2829
import java.util.stream.Collectors;
2930
import software.amazon.smithy.codegen.core.CodegenException;
3031
import software.amazon.smithy.codegen.core.Symbol;
3132
import software.amazon.smithy.go.codegen.GoStackStepMiddlewareGenerator;
33+
import software.amazon.smithy.go.codegen.GoValueAccessUtils;
3234
import software.amazon.smithy.go.codegen.GoWriter;
3335
import software.amazon.smithy.go.codegen.SmithyGoDependency;
3436
import software.amazon.smithy.go.codegen.SyntheticClone;
@@ -45,6 +47,7 @@
4547
import software.amazon.smithy.model.shapes.ServiceShape;
4648
import software.amazon.smithy.model.shapes.Shape;
4749
import software.amazon.smithy.model.shapes.ShapeId;
50+
import software.amazon.smithy.model.shapes.ShapeType;
4851
import software.amazon.smithy.model.shapes.StructureShape;
4952
import software.amazon.smithy.model.shapes.UnionShape;
5053
import software.amazon.smithy.model.traits.EnumTrait;
@@ -54,6 +57,7 @@
5457
import software.amazon.smithy.model.traits.MediaTypeTrait;
5558
import software.amazon.smithy.model.traits.StreamingTrait;
5659
import software.amazon.smithy.model.traits.TimestampFormatTrait;
60+
import software.amazon.smithy.model.traits.XmlNamespaceTrait;
5761

5862
/**
5963
* Handles general components across the AWS JSON protocols that have HTTP bindings.
@@ -119,15 +123,29 @@ protected void writeMiddlewarePayloadAsDocumentSerializerDelegator(
119123
payloadShape, context.getService(), context.getProtocolName());
120124
}
121125

122-
writer.addUseImports(SmithyGoDependency.SMITHY_JSON);
123-
writer.write("jsonEncoder := smithyjson.NewEncoder()");
124-
writer.openBlock("if err := $L($L, jsonEncoder.Value); err != nil {", "}", functionName,
125-
operand, () -> {
126-
writer.write("return out, metadata, &smithy.SerializationError{Err: err}");
126+
writeSetPayloadShapeHeader(writer, payloadShape);
127+
128+
GoValueAccessUtils.writeIfNonZeroValueMember(context.getModel(), context.getSymbolProvider(), writer,
129+
memberShape, operand, (s) -> {
130+
writer.addUseImports(SmithyGoDependency.SMITHY_JSON);
131+
writer.addUseImports(SmithyGoDependency.BYTES);
132+
writer.write("""
133+
jsonEncoder := smithyjson.NewEncoder()
134+
if err := $L($L, jsonEncoder.Value); err != nil {
135+
return out, metadata, &smithy.SerializationError{Err: err}
136+
}
137+
payload := bytes.NewReader(jsonEncoder.Bytes())""", functionName, s);
138+
writeSetStream(writer, "payload");
139+
if (payloadShape.getType() == ShapeType.STRUCTURE) {
140+
writer.openBlock("} else {", "", () -> {
141+
writer.write("""
142+
jsonEncoder := smithyjson.NewEncoder()
143+
jsonEncoder.Value.Object().Close()
144+
payload := bytes.NewReader(jsonEncoder.Bytes())""");
145+
writeSetStream(writer, "payload");
146+
});
147+
}
127148
});
128-
129-
writer.addUseImports(SmithyGoDependency.BYTES);
130-
writer.write("payload := bytes.NewReader(jsonEncoder.Bytes())");
131149
}
132150

133151
/**

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/RestXmlProtocolGenerator.java

+30-21
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.HashSet;
1212
import java.util.Optional;
1313
import java.util.Set;
14+
import java.util.function.Consumer;
1415
import java.util.stream.Collectors;
1516
import java.util.TreeSet;
1617
import java.util.function.Predicate;
@@ -19,6 +20,7 @@
1920
import software.amazon.smithy.codegen.core.Symbol;
2021
import software.amazon.smithy.codegen.core.SymbolProvider;
2122
import software.amazon.smithy.go.codegen.GoStackStepMiddlewareGenerator;
23+
import software.amazon.smithy.go.codegen.GoValueAccessUtils;
2224
import software.amazon.smithy.go.codegen.GoWriter;
2325
import software.amazon.smithy.go.codegen.SmithyGoDependency;
2426
import software.amazon.smithy.go.codegen.SymbolUtils;
@@ -114,7 +116,7 @@ protected void writeMiddlewareDocumentSerializerDelegator(
114116
writer.insertTrailingNewline();
115117

116118
writer.openBlock("if request, err = request.SetStream(bytes.NewReader(xmlEncoder.Bytes())); "
117-
+ "err != nil {", "}", () -> {
119+
+ "err != nil {", "}", () -> {
118120
writer.write("return out, metadata, &smithy.SerializationError{Err: err}");
119121
});
120122
}
@@ -152,28 +154,35 @@ protected void writeMiddlewarePayloadAsDocumentSerializerDelegator(
152154
Model model = context.getModel();
153155
Shape payloadShape = model.expectShape(memberShape.getTarget());
154156

155-
writer.addUseImports(SmithyGoDependency.SMITHY_XML);
156-
writer.addUseImports(SmithyGoDependency.BYTES);
157-
writer.write("xmlEncoder := smithyxml.NewEncoder(bytes.NewBuffer(nil))");
157+
GoValueAccessUtils.writeIfNonZeroValueMember(context.getModel(), context.getSymbolProvider(), writer,
158+
memberShape, operand, (s) -> {
159+
writeSetPayloadShapeHeader(writer, payloadShape);
158160

159-
generatePayloadAsDocumentXMLStartElement(context, memberShape, "payloadRoot", operand);
161+
writer.addUseImports(SmithyGoDependency.SMITHY_XML);
162+
writer.addUseImports(SmithyGoDependency.BYTES);
163+
writer.write("xmlEncoder := smithyxml.NewEncoder(bytes.NewBuffer(nil))");
160164

161-
// check if service shape is bound by xmlNameSpace Trait
162-
Optional<XmlNamespaceTrait> xmlNamespaceTrait = context.getService().getTrait(XmlNamespaceTrait.class);
163-
if (xmlNamespaceTrait.isPresent()) {
164-
XmlNamespaceTrait namespace = xmlNamespaceTrait.get();
165-
writer.write("payloadRoot.Attr = append(payloadRoot.Attr, smithyxml.NewNamespaceAttribute($S, $S))",
166-
namespace.getPrefix().isPresent() ? namespace.getPrefix().get() : "", namespace.getUri()
167-
);
168-
}
165+
generatePayloadAsDocumentXMLStartElement(context, memberShape, "payloadRoot", s);
169166

170-
String functionName = ProtocolGenerator.getDocumentSerializerFunctionName(
171-
payloadShape, context.getService(), getProtocolName());
172-
writer.openBlock("if err := $L($L, xmlEncoder.RootElement(payloadRoot)); err != nil {", "}", functionName,
173-
operand, () -> {
174-
writer.write("return out, metadata, &smithy.SerializationError{Err: err}");
167+
// check if service shape is bound by xmlNameSpace Trait
168+
Optional<XmlNamespaceTrait> xmlNamespaceTrait = context.getService()
169+
.getTrait(XmlNamespaceTrait.class);
170+
if (xmlNamespaceTrait.isPresent()) {
171+
XmlNamespaceTrait namespace = xmlNamespaceTrait.get();
172+
writer.write("payloadRoot.Attr = append(payloadRoot.Attr, smithyxml.NewNamespaceAttribute($S, $S))",
173+
namespace.getPrefix().isPresent() ? namespace.getPrefix().get() : "", namespace.getUri()
174+
);
175+
}
176+
177+
String functionName = ProtocolGenerator.getDocumentSerializerFunctionName(
178+
payloadShape, context.getService(), getProtocolName());
179+
writer.openBlock("if err := $L($L, xmlEncoder.RootElement(payloadRoot)); err != nil {", "}", functionName,
180+
s, () -> {
181+
writer.write("return out, metadata, &smithy.SerializationError{Err: err}");
182+
});
183+
writer.write("payload := bytes.NewReader(xmlEncoder.Bytes())");
184+
writeSetStream(writer, "payload");
175185
});
176-
writer.write("payload := bytes.NewReader(xmlEncoder.Bytes())");
177186
}
178187

179188
@Override
@@ -490,7 +499,7 @@ protected void generateEventStreamSerializers(
490499

491500
var hasBindings = targetShape.members().stream()
492501
.filter(ms -> ms.getTrait(EventHeaderTrait.class).isPresent()
493-
|| ms.getTrait(EventPayloadTrait.class).isPresent())
502+
|| ms.getTrait(EventPayloadTrait.class).isPresent())
494503
.findAny();
495504
if (hasBindings.isPresent()) {
496505
var payload = targetShape.members().stream()
@@ -609,7 +618,7 @@ protected void generateEventStreamDeserializers(
609618

610619
var hasBindings = targetShape.members().stream()
611620
.filter(ms -> ms.getTrait(EventHeaderTrait.class).isPresent()
612-
|| ms.getTrait(EventPayloadTrait.class).isPresent())
621+
|| ms.getTrait(EventPayloadTrait.class).isPresent())
613622
.findAny();
614623
if (hasBindings.isPresent()) {
615624
var payload = targetShape.members().stream()

internal/protocoltest/awsrestjson/api_op_AllQueryStringTypes.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/protocoltest/awsrestjson/api_op_AllQueryStringTypes_test.go

+21-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/protocoltest/awsrestjson/api_op_ConstantAndVariableQueryString_test.go

+14-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/protocoltest/awsrestjson/api_op_ConstantQueryString_test.go

+14-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)