diff --git a/codegen/build.gradle.kts b/codegen/build.gradle.kts index 2ba03538d267..3a92e47cd5ff 100644 --- a/codegen/build.gradle.kts +++ b/codegen/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { version = "0.8.0" } -extra["smithyVersion"] = "[1.15.0,1.16.0[" +extra["smithyVersion"] = "[1.16.3,1.17.0[" // The root project doesn't produce a JAR. tasks["jar"].enabled = false diff --git a/codegen/generic-client-test-codegen/build.gradle.kts b/codegen/generic-client-test-codegen/build.gradle.kts index 12cbbb787766..54fa154b7ed5 100644 --- a/codegen/generic-client-test-codegen/build.gradle.kts +++ b/codegen/generic-client-test-codegen/build.gradle.kts @@ -25,7 +25,7 @@ buildscript { } plugins { - id("software.amazon.smithy") version "0.5.3" + id("software.amazon.smithy") version "0.6.0" } dependencies { diff --git a/codegen/protocol-test-codegen/build.gradle.kts b/codegen/protocol-test-codegen/build.gradle.kts index c69799d23396..01e7bf7e3bf0 100644 --- a/codegen/protocol-test-codegen/build.gradle.kts +++ b/codegen/protocol-test-codegen/build.gradle.kts @@ -25,7 +25,7 @@ buildscript { } plugins { - id("software.amazon.smithy") version "0.5.3" + id("software.amazon.smithy") version "0.6.0" } dependencies { diff --git a/codegen/sdk-codegen/build.gradle.kts b/codegen/sdk-codegen/build.gradle.kts index c8088c9dc610..79d21c516414 100644 --- a/codegen/sdk-codegen/build.gradle.kts +++ b/codegen/sdk-codegen/build.gradle.kts @@ -31,7 +31,7 @@ buildscript { } plugins { - id("software.amazon.smithy") version "0.5.3" + id("software.amazon.smithy") version "0.6.0" } dependencies { diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java index 7ef62972c78a..649e7690ad7f 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java @@ -314,12 +314,6 @@ private static boolean filterProtocolTests( return true; } - // TODO: remove when there's a decision on behavior for list of timestamps. - // https://github.com/awslabs/smithy/issues/1015 - if (testCase.getId().equals("RestJsonInputAndOutputWithTimestampHeaders")) { - return true; - } - return false; } diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonRpcProtocolGenerator.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonRpcProtocolGenerator.java index 354726930508..ec46a7bbfffc 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonRpcProtocolGenerator.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonRpcProtocolGenerator.java @@ -64,12 +64,16 @@ protected Format getDocumentTimestampFormat() { @Override protected void generateDocumentBodyShapeSerializers(GenerationContext context, Set shapes) { - AwsProtocolUtils.generateDocumentBodyShapeSerde(context, shapes, new JsonShapeSerVisitor(context)); + AwsProtocolUtils.generateDocumentBodyShapeSerde(context, shapes, + // AWS JSON does not support jsonName + new JsonShapeSerVisitor(context, (shape, name) -> name)); } @Override protected void generateDocumentBodyShapeDeserializers(GenerationContext context, Set shapes) { - AwsProtocolUtils.generateDocumentBodyShapeSerde(context, shapes, new JsonShapeDeserVisitor(context)); + AwsProtocolUtils.generateDocumentBodyShapeSerde(context, shapes, + // AWS JSON does not support jsonName + new JsonShapeDeserVisitor(context, (shape, name) -> name)); } @Override diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeDeserVisitor.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeDeserVisitor.java index 1884a67ab9b0..9236b924d942 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeDeserVisitor.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeDeserVisitor.java @@ -17,6 +17,7 @@ import java.util.Map; import java.util.TreeMap; +import java.util.function.BiFunction; import software.amazon.smithy.codegen.core.SymbolProvider; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.shapes.CollectionShape; @@ -51,8 +52,19 @@ @SmithyInternalApi final class JsonShapeDeserVisitor extends DocumentShapeDeserVisitor { + private final BiFunction memberNameStrategy; + JsonShapeDeserVisitor(GenerationContext context) { + this(context, + // Use the jsonName trait value if present, otherwise use the member name. + (memberShape, memberName) -> memberShape.getTrait(JsonNameTrait.class) + .map(JsonNameTrait::getValue) + .orElse(memberName)); + } + + JsonShapeDeserVisitor(GenerationContext context, BiFunction memberNameStrategy) { super(context); + this.memberNameStrategy = memberNameStrategy; } private DocumentMemberDeserVisitor getMemberVisitor(MemberShape memberShape, String dataSource) { @@ -154,10 +166,7 @@ protected void deserializeStructure(GenerationContext context, StructureShape sh writer.openBlock("return {", "} as any;", () -> { // Set all the members to undefined to meet type constraints. members.forEach((memberName, memberShape) -> { - // Use the jsonName trait value if present, otherwise use the member name. - String locationName = memberShape.getTrait(JsonNameTrait.class) - .map(JsonNameTrait::getValue) - .orElse(memberName); + String locationName = memberNameStrategy.apply(memberShape, memberName); Shape target = context.getModel().expectShape(memberShape.getTarget()); if (usesExpect(target)) { @@ -195,10 +204,7 @@ protected void deserializeUnion(GenerationContext context, UnionShape shape) { Map members = new TreeMap<>(shape.getAllMembers()); members.forEach((memberName, memberShape) -> { Shape target = model.expectShape(memberShape.getTarget()); - // Use the jsonName trait value if present, otherwise use the member name. - String locationName = memberShape.getTrait(JsonNameTrait.class) - .map(JsonNameTrait::getValue) - .orElse(memberName); + String locationName = memberNameStrategy.apply(memberShape, memberName); String memberValue = target.accept(getMemberVisitor(memberShape, "output." + locationName)); if (usesExpect(target)) { diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeSerVisitor.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeSerVisitor.java index 1e29e5021415..1de98b4e42f4 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeSerVisitor.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/JsonShapeSerVisitor.java @@ -17,6 +17,7 @@ import java.util.Map; import java.util.TreeMap; +import java.util.function.BiFunction; import software.amazon.smithy.codegen.core.SymbolProvider; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.shapes.CollectionShape; @@ -51,10 +52,22 @@ final class JsonShapeSerVisitor extends DocumentShapeSerVisitor { private static final Format TIMESTAMP_FORMAT = Format.EPOCH_SECONDS; + private final BiFunction memberNameStrategy; + JsonShapeSerVisitor(GenerationContext context) { + this(context, + // Use the jsonName trait value if present, otherwise use the member name. + (memberShape, memberName) -> memberShape.getTrait(JsonNameTrait.class) + .map(JsonNameTrait::getValue) + .orElse(memberName)); + } + + JsonShapeSerVisitor(GenerationContext context, BiFunction memberNameStrategy) { super(context); + this.memberNameStrategy = memberNameStrategy; } + private DocumentMemberSerVisitor getMemberVisitor(String dataSource) { return new JsonMemberSerVisitor(getContext(), dataSource, TIMESTAMP_FORMAT); } @@ -125,10 +138,7 @@ public void serializeStructure(GenerationContext context, StructureShape shape) // Use a TreeMap to sort the members. Map members = new TreeMap<>(shape.getAllMembers()); members.forEach((memberName, memberShape) -> { - // Use the jsonName trait value if present, otherwise use the member name. - String locationName = memberShape.getTrait(JsonNameTrait.class) - .map(JsonNameTrait::getValue) - .orElse(memberName); + String locationName = memberNameStrategy.apply(memberShape, memberName); Shape target = context.getModel().expectShape(memberShape.getTarget()); String inputLocation = "input." + memberName; @@ -160,10 +170,7 @@ public void serializeUnion(GenerationContext context, UnionShape shape) { // Use a TreeMap to sort the members. Map members = new TreeMap<>(shape.getAllMembers()); members.forEach((memberName, memberShape) -> { - // Use the jsonName trait value if present, otherwise use the member name. - String locationName = memberShape.getTrait(JsonNameTrait.class) - .map(JsonNameTrait::getValue) - .orElse(memberName); + String locationName = memberNameStrategy.apply(memberShape, memberName); Shape target = model.expectShape(memberShape.getTarget()); // Dispatch to the input value provider for any additional handling. writer.write("$L: value => ({ $S: $L }),", memberName, locationName,