Skip to content

Commit 8c6b88f

Browse files
AllanZhengYPkuhe
authored andcommitted
only mixin stream utils in client SDK
1 parent 7338ee2 commit 8c6b88f

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;
@@ -315,7 +315,7 @@ private void writeInputType(String typeName, Optional<StructureShape> inputShape
315315
if (blobStreamingMembers.isEmpty()) {
316316
writer.write("export interface $L extends $T {}", typeName, symbolProvider.toSymbol(input));
317317
} else {
318-
writeStreamingCommandTypeToSer(writer, symbolProvider.toSymbol(input), typeName,
318+
writeClientCommandStreamingInputType(writer, symbolProvider.toSymbol(input), typeName,
319319
blobStreamingMembers.get(0));
320320
}
321321
} else {
@@ -335,8 +335,8 @@ private void writeOutputType(String typeName, Optional<StructureShape> outputSha
335335
writer.write("export interface $L extends $T, __MetadataBearer {}",
336336
typeName, symbolProvider.toSymbol(outputShape.get()));
337337
} else {
338-
writeStreamingCommandTypeFromDeser(writer, symbolProvider.toSymbol(output), typeName,
339-
blobStreamingMembers.get(0), settings);
338+
writeClientCommandStreamingOutputType(writer, symbolProvider.toSymbol(output), typeName,
339+
blobStreamingMembers.get(0));
340340
}
341341
} else {
342342
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
@@ -2321,6 +2321,7 @@ private HttpBinding readPayload(
23212321
HttpBinding binding
23222322
) {
23232323
TypeScriptWriter writer = context.getWriter();
2324+
boolean isClientSdk = context.getSettings().generateClient();
23242325

23252326
// There can only be one payload binding.
23262327
Shape target = context.getModel().expectShape(binding.getMember().getTarget());
@@ -2329,7 +2330,7 @@ private HttpBinding readPayload(
23292330
if (target.hasTrait(StreamingTrait.class)) {
23302331
writer.write("const data: any = output.body;");
23312332
// If payload is streaming blob, return low-level stream with the stream utility functions mixin.
2332-
if (target instanceof BlobShape) {
2333+
if (isClientSdk && target instanceof BlobShape) {
23332334
writer.write("context.sdkStreamMixin(data);");
23342335
}
23352336
} else if (target instanceof BlobShape) {

0 commit comments

Comments
 (0)