From 26ff760d7ce72110046bc044b166148dedc822dd Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 2 Sep 2025 15:19:00 -0400 Subject: [PATCH] fix: event stream serialization --- .../codegen/integration/EventStreamGenerator.java | 2 +- .../integration/HttpRpcProtocolGenerator.java | 14 +++++++++++++- .../codegen/protocols/cbor/SmithyRpcV2Cbor.java | 6 +++++- 3 files changed, 19 insertions(+), 3 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 30b3a7ad548..3d115213acd 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 @@ -387,7 +387,7 @@ private void writeEventBody( writer.write("body = input.$L;", payloadMemberName); } else if (payloadShape instanceof StringShape) { writer.write("body = context.utf8Decoder(input.$L);", payloadMemberName); - } else if (payloadShape instanceof BlobShape || payloadShape instanceof StringShape) { + } else if (payloadShape instanceof StructureShape || payloadShape instanceof UnionShape) { Symbol symbol = getSymbol(context, payloadShape); String serFunctionName = ProtocolGenerator.getSerFunctionShortName(symbol); boolean mayElide = serdeElisionIndex.mayElide(payloadShape); diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpRpcProtocolGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpRpcProtocolGenerator.java index 68038e127d9..764e41ee3b6 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpRpcProtocolGenerator.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpRpcProtocolGenerator.java @@ -34,6 +34,7 @@ import software.amazon.smithy.typescript.codegen.TypeScriptWriter; import software.amazon.smithy.typescript.codegen.knowledge.SerdeElisionIndex; import software.amazon.smithy.utils.OptionalUtils; +import software.amazon.smithy.utils.SmithyInternalApi; import software.amazon.smithy.utils.SmithyUnstableApi; /** @@ -107,7 +108,7 @@ public void generateSharedComponents(GenerationContext context) { getDocumentContentType(), () -> { TypeScriptWriter writer = context.getWriter(); - writer.write("body = context.utf8Decoder(body);"); + serializeEventStreamBodyToBytes(writer); }, serializingDocumentShapes ); @@ -606,6 +607,17 @@ protected String getErrorBodyLocation(GenerationContext context, String outputLo return outputLocation; } + /** + * Allows RPC protocols to designate how to convert the body into bytes. + * + * @deprecated superseded by schema-serde. + */ + @Deprecated + @SmithyInternalApi + protected void serializeEventStreamBodyToBytes(TypeScriptWriter writer) { + writer.write("body = context.utf8Decoder(JSON.stringify(body));"); + } + /** * Writes the code needed to deserialize the output document of a response. * diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/protocols/cbor/SmithyRpcV2Cbor.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/protocols/cbor/SmithyRpcV2Cbor.java index ce9a10a9cd8..c647326a96a 100644 --- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/protocols/cbor/SmithyRpcV2Cbor.java +++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/protocols/cbor/SmithyRpcV2Cbor.java @@ -67,7 +67,11 @@ public void generateSharedComponents(GenerationContext context) { service, getDocumentContentType(), () -> { - writer.write("body = context.utf8Decoder(body);"); + writer.addImportSubmodule( + "cbor", null, + TypeScriptDependency.SMITHY_CORE, SmithyCoreSubmodules.CBOR + ); + writer.write("body = cbor.encode(body);"); }, serializingDocumentShapes );