Skip to content

Commit 18d6d2e

Browse files
committed
only mixin stream utils in client SDK
1 parent 53dc4e9 commit 18d6d2e

File tree

4 files changed

+23
-36
lines changed

4 files changed

+23
-36
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenUtils.java

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -117,61 +117,58 @@ static List<MemberShape> getBlobStreamingMembers(Model model, StructureShape sha
117117
return shape.getAllMembers().values().stream()
118118
.filter(memberShape -> {
119119
// Streaming blobs need to have their types modified
120-
// See `writeStreamingCommandTypeToSer`
120+
// See `writeClientCommandStreamingInputType`
121121
Shape target = model.expectShape(memberShape.getTarget());
122122
return target.isBlobShape() && target.hasTrait(StreamingTrait.class);
123123
})
124124
.collect(Collectors.toList());
125125
}
126126

127127
/**
128-
* Generate the type of the command output of server sdk or the input of the client sdk given the streaming blob
128+
* Generate the type of the command input of the client sdk given the streaming blob
129129
* member of the shape. The generated type eases the streaming member requirement so that users don't need to
130130
* construct a stream every time.
131131
* This type decoration is allowed in Smithy because it makes, for the same member, the type to be serialized is
132132
* more permissive than the type to be deserialized.
133133
* Refer here for more rationales: https://github.com/aws/aws-sdk-js-v3/issues/843
134134
*/
135-
static void writeStreamingCommandTypeToSer(
135+
static void writeClientCommandStreamingInputType(
136136
TypeScriptWriter writer,
137137
Symbol containerSymbol,
138138
String typeName,
139139
MemberShape streamingMember
140140
) {
141141
String memberName = streamingMember.getMemberName();
142142
String optionalSuffix = streamingMember.isRequired() ? "" : "?";
143-
writer.openBlock("type $LType = Omit<$T, $S> & {", "};", typeName, containerSymbol, memberName, () -> {
144-
writer.writeDocs(String.format("For *`%1$s[\"%2$s\"]`*, see {@link %1$s.%2$s}.",
145-
containerSymbol.getName(), memberName));
146-
writer.write("$1L$2L: $3T[$1S]|string|Uint8Array|Buffer;", memberName, optionalSuffix, containerSymbol);
143+
writer.openBlock("type $LType = Omit<$T, $S> & {", "};", typeName,
144+
containerSymbol, memberName, () -> {
145+
writer.writeDocs(String.format("For *`%1$s[\"%2$s\"]`*, see {@link %1$s.%2$s}.",
146+
containerSymbol.getName(), memberName));
147+
writer.write("$1L$2L: $3T[$1S]|string|Uint8Array|Buffer;", memberName, optionalSuffix,
148+
containerSymbol);
147149
});
148150
writer.writeDocs(String.format("This interface extends from `%1$s` interface. There are more parameters than"
149151
+ " `%2$s` defined in {@link %1$s}", containerSymbol.getName(), memberName));
150152
writer.write("export interface $1L extends $1LType {}", typeName);
151153
}
152154

153155
/**
154-
* Generate the type of the command input of server sdk or the output of the client sdk given the streaming blob
156+
* Generate the type of the command output of the client sdk given the streaming blob
155157
* member of the shape. The type marks the streaming blob member to contain the utility methods to transform the
156158
* stream to string, buffer or WHATWG stream API.
157159
*/
158-
static void writeStreamingCommandTypeFromDeser(
160+
static void writeClientCommandStreamingOutputType(
159161
TypeScriptWriter writer,
160162
Symbol containerSymbol,
161163
String typeName,
162-
MemberShape streamingMember,
163-
TypeScriptSettings settings
164+
MemberShape streamingMember
164165
) {
165166
String memberName = streamingMember.getMemberName();
166167
String optionalSuffix = streamingMember.isRequired() ? "" : "?";
167-
boolean isClientSdk = settings.generateClient();
168-
if (isClientSdk) {
169-
writer.addImport("MetadataBearer", "__MetadataBearer", TypeScriptDependency.AWS_SDK_TYPES.packageName);
170-
}
171-
String metadataBearerType = isClientSdk ? "__MetadataBearer & " : "";
168+
writer.addImport("MetadataBearer", "__MetadataBearer", TypeScriptDependency.AWS_SDK_TYPES.packageName);
172169
writer.addImport("SdkStream", "__SdkStream", TypeScriptDependency.AWS_SDK_TYPES.packageName);
173-
writer.openBlock("type $LType = $LOmit<$T, $S> & {", "};",
174-
typeName, metadataBearerType, containerSymbol, memberName, () -> {
170+
writer.openBlock("type $LType = __MetadataBearer & Omit<$T, $S> & {", "};",
171+
typeName, containerSymbol, memberName, () -> {
175172
writer.writeDocs(String.format("For *`%1$s[\"%2$s\"]`*, see {@link %1$s.%2$s}.",
176173
containerSymbol.getName(), memberName));
177174
writer.write("$1L$2L: __SdkStream<Required<$3T>[$1S]>;", memberName, optionalSuffix,

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
package software.amazon.smithy.typescript.codegen;
1717

1818
import static software.amazon.smithy.typescript.codegen.CodegenUtils.getBlobStreamingMembers;
19-
import static software.amazon.smithy.typescript.codegen.CodegenUtils.writeStreamingCommandTypeFromDeser;
20-
import static software.amazon.smithy.typescript.codegen.CodegenUtils.writeStreamingCommandTypeToSer;
19+
import static software.amazon.smithy.typescript.codegen.CodegenUtils.writeClientCommandStreamingInputType;
20+
import static software.amazon.smithy.typescript.codegen.CodegenUtils.writeClientCommandStreamingOutputType;
2121

2222
import java.nio.file.Paths;
2323
import java.util.List;
@@ -247,7 +247,7 @@ private void writeInputType(String typeName, Optional<StructureShape> inputShape
247247
if (blobStreamingMembers.isEmpty()) {
248248
writer.write("export interface $L extends $T {}", typeName, symbolProvider.toSymbol(input));
249249
} else {
250-
writeStreamingCommandTypeToSer(writer, symbolProvider.toSymbol(input), typeName,
250+
writeClientCommandStreamingInputType(writer, symbolProvider.toSymbol(input), typeName,
251251
blobStreamingMembers.get(0));
252252
}
253253
} else {
@@ -267,8 +267,8 @@ private void writeOutputType(String typeName, Optional<StructureShape> outputSha
267267
writer.write("export interface $L extends $T, __MetadataBearer {}",
268268
typeName, symbolProvider.toSymbol(outputShape.get()));
269269
} else {
270-
writeStreamingCommandTypeFromDeser(writer, symbolProvider.toSymbol(output), typeName,
271-
blobStreamingMembers.get(0), settings);
270+
writeClientCommandStreamingOutputType(writer, symbolProvider.toSymbol(output), typeName,
271+
blobStreamingMembers.get(0));
272272
}
273273
} else {
274274
writer.write("export interface $L extends __MetadataBearer {}", typeName);

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerCommandGenerator.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515

1616
package software.amazon.smithy.typescript.codegen;
1717

18-
import static software.amazon.smithy.typescript.codegen.CodegenUtils.getBlobStreamingMembers;
19-
import static software.amazon.smithy.typescript.codegen.CodegenUtils.writeStreamingCommandTypeFromDeser;
20-
2118
import java.nio.file.Paths;
2219
import java.util.Collections;
2320
import java.util.Iterator;
@@ -31,7 +28,6 @@
3128
import software.amazon.smithy.model.Model;
3229
import software.amazon.smithy.model.knowledge.OperationIndex;
3330
import software.amazon.smithy.model.knowledge.TopDownIndex;
34-
import software.amazon.smithy.model.shapes.MemberShape;
3531
import software.amazon.smithy.model.shapes.OperationShape;
3632
import software.amazon.smithy.model.shapes.ServiceShape;
3733
import software.amazon.smithy.model.shapes.StructureShape;
@@ -101,13 +97,7 @@ private void addInputAndOutputTypes() {
10197
private void writeInputType(String typeName, Optional<StructureShape> inputShape) {
10298
if (inputShape.isPresent()) {
10399
StructureShape input = inputShape.get();
104-
List<MemberShape> blobStreamingMembers = getBlobStreamingMembers(model, input);
105-
if (blobStreamingMembers.isEmpty()) {
106-
writer.write("export interface $L extends $T {}", typeName, symbolProvider.toSymbol(input));
107-
} else {
108-
writeStreamingCommandTypeFromDeser(writer, symbolProvider.toSymbol(input), typeName,
109-
blobStreamingMembers.get(0), settings);
110-
}
100+
writer.write("export interface $L extends $T {}", typeName, symbolProvider.toSymbol(inputShape.get()));
111101
renderNamespace(typeName, input);
112102
} else {
113103
// If the input is non-existent, then use an empty object.
@@ -134,7 +124,6 @@ private void renderNamespace(String typeName, StructureShape input) {
134124

135125
private void writeOutputType(String typeName, Optional<StructureShape> outputShape) {
136126
if (outputShape.isPresent()) {
137-
//TODO: refer to writeStreamingCommandTypeToSer when streaming is supported.
138127
writer.write("export interface $L extends $T {}",
139128
typeName, symbolProvider.toSymbol(outputShape.get()));
140129
} else {

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2295,6 +2295,7 @@ private HttpBinding readPayload(
22952295
HttpBinding binding
22962296
) {
22972297
TypeScriptWriter writer = context.getWriter();
2298+
boolean isClientSdk = context.getSettings().generateClient();
22982299

22992300
// There can only be one payload binding.
23002301
Shape target = context.getModel().expectShape(binding.getMember().getTarget());
@@ -2303,7 +2304,7 @@ private HttpBinding readPayload(
23032304
if (target.hasTrait(StreamingTrait.class)) {
23042305
writer.write("const data: any = output.body;");
23052306
// If payload is streaming blob, return low-level stream with the stream utility functions mixin.
2306-
if (target instanceof BlobShape) {
2307+
if (isClientSdk && target instanceof BlobShape) {
23072308
writer.write("context.sdkStreamMixin(data);");
23082309
}
23092310
} else if (target instanceof BlobShape) {

0 commit comments

Comments
 (0)