From 175dee0fc8c497adb17af6aec1d606dba1108c15 Mon Sep 17 00:00:00 2001 From: George Fu Date: Wed, 24 Jul 2024 22:33:37 +0000 Subject: [PATCH 1/2] fix(event-streams): use member name as :event-type header value --- .../integration/EventStreamGenerator.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java index 0b6ced0f3fc..3b0a7561a82 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java @@ -43,6 +43,7 @@ import software.amazon.smithy.typescript.codegen.TypeScriptWriter; import software.amazon.smithy.typescript.codegen.integration.ProtocolGenerator.GenerationContext; import software.amazon.smithy.typescript.codegen.knowledge.SerdeElisionIndex; +import software.amazon.smithy.utils.Pair; import software.amazon.smithy.utils.SmithyUnstableApi; /** @@ -102,15 +103,18 @@ public void generateEventStreamSerializers( TopDownIndex topDownIndex = TopDownIndex.of(model); Set operations = topDownIndex.getContainedOperations(service); TreeSet eventUnionsToSerialize = new TreeSet<>(); - TreeSet eventShapesToMarshall = new TreeSet<>(); + TreeSet> eventShapesToMarshall = new TreeSet<>(); for (OperationShape operation : operations) { if (hasEventStreamInput(context, operation)) { UnionShape eventsUnion = getEventStreamInputShape(context, operation); eventUnionsToSerialize.add(eventsUnion); - Set eventShapes = eventsUnion.members().stream() - .map(member -> model.expectShape(member.getTarget()).asStructureShape().get()) - .collect(Collectors.toSet()); - eventShapes.forEach(eventShapesToMarshall::add); + eventsUnion.members().stream() + .forEach(member -> { + eventShapesToMarshall.add(Pair.of( + member.getMemberName(), + model.expectShape(member.getTarget()).asStructureShape().get() + )); + }); } } @@ -118,14 +122,16 @@ public void generateEventStreamSerializers( generateEventStreamSerializer(context, eventsUnion); }); SerdeElisionIndex serdeElisionIndex = SerdeElisionIndex.of(model); - eventShapesToMarshall.forEach(event -> { + eventShapesToMarshall.forEach(memberNameAndEvent -> { generateEventMarshaller( context, - event, + memberNameAndEvent.getLeft(), + memberNameAndEvent.getRight(), documentContentType, serializeInputEventDocumentPayload, documentShapesToSerialize, - serdeElisionIndex); + serdeElisionIndex + ); }); } @@ -237,6 +243,7 @@ private Symbol getSymbol(GenerationContext context, Shape shape) { public void generateEventMarshaller( GenerationContext context, + String memberName, StructureShape event, String documentContentType, Runnable serializeInputEventDocumentPayload, @@ -253,7 +260,7 @@ public void generateEventMarshaller( + "): __Message => {", "}", methodName, symbol, () -> { writer.openBlock("const headers: __MessageHeaders = {", "}", () -> { //fix headers required by event stream - writer.write("\":event-type\": { type: \"string\", value: $S },", symbol.getName()); + writer.write("\":event-type\": { type: \"string\", value: $S },", memberName); writer.write("\":message-type\": { type: \"string\", value: \"event\" },"); writeEventContentTypeHeader(context, event, documentContentType); }); From 4a996acedb2fad50941492c6fe41f9ee5b6fe896 Mon Sep 17 00:00:00 2001 From: George Fu Date: Wed, 24 Jul 2024 22:42:56 +0000 Subject: [PATCH 2/2] comparator --- .../codegen/integration/EventStreamGenerator.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java index 3b0a7561a82..cdd717ef8ad 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/EventStreamGenerator.java @@ -16,6 +16,7 @@ package software.amazon.smithy.typescript.codegen.integration; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.TreeSet; @@ -103,12 +104,15 @@ public void generateEventStreamSerializers( TopDownIndex topDownIndex = TopDownIndex.of(model); Set operations = topDownIndex.getContainedOperations(service); TreeSet eventUnionsToSerialize = new TreeSet<>(); - TreeSet> eventShapesToMarshall = new TreeSet<>(); + TreeSet> eventShapesToMarshall = new TreeSet<>( + (a, b) -> Objects.compare(a.getRight(), b.getRight(), StructureShape::compareTo) + ); + for (OperationShape operation : operations) { if (hasEventStreamInput(context, operation)) { UnionShape eventsUnion = getEventStreamInputShape(context, operation); eventUnionsToSerialize.add(eventsUnion); - eventsUnion.members().stream() + eventsUnion.members() .forEach(member -> { eventShapesToMarshall.add(Pair.of( member.getMemberName(), @@ -161,6 +165,7 @@ public void generateEventStreamDeserializers( Set operations = topDownIndex.getContainedOperations(service); TreeSet eventUnionsToDeserialize = new TreeSet<>(); TreeSet eventShapesToUnmarshall = new TreeSet<>(); + for (OperationShape operation : operations) { if (hasEventStreamOutput(context, operation)) { UnionShape eventsUnion = getEventStreamOutputShape(context, operation);