Skip to content

Commit 171b9c8

Browse files
authored
Merge pull request #11 from awslabs/context_update
Update to SerdeContext
2 parents fd9c923 + afd97d2 commit 171b9c8

File tree

4 files changed

+28
-30
lines changed

4 files changed

+28
-30
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ static ApplicationProtocol resolve(
9696
ServiceShape service,
9797
Collection<TypeScriptIntegration> integrations
9898
) {
99+
// TODO If we're going to need to resolve this more than once, store it.
99100
List<String> resolvedProtocols = settings.resolveServiceProtocols(service);
100101
// Get the list of protocol generators that have implementations from the service.
101102
List<ProtocolGenerator> generators = integrations.stream()

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

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ public void run() {
8989
writer.addImport("ServiceInputTypes", "ServiceInputTypes", serviceSymbol.getNamespace());
9090
writer.addImport("ServiceOutputTypes", "ServiceOutputTypes", serviceSymbol.getNamespace());
9191
writer.addImport("Command", "$Command", "@aws-sdk/smithy-client");
92-
writer.addImport("*", "$types", "@aws-sdk/types");
92+
writer.addImport("FinalizeHandlerArguments", "FinalizeHandlerArguments", "@aws-sdk/types");
93+
writer.addImport("Handler", "Handler", "@aws-sdk/types");
94+
writer.addImport("HandlerExecutionContext", "HandlerExecutionContext", "@aws-sdk/types");
95+
writer.addImport("MiddlewareStack", "MiddlewareStack", "@aws-sdk/types");
96+
writer.addImport("SerdeContext", "SerdeContext", "@aws-sdk/types");
9397

9498
addInputAndOutputTypes();
9599

96-
// This "Utils" type is used when serializing and deserializing commands. It
97-
// provides various platform specific methods that serde needs.
98-
writer.write("type Utils = { [key: string]: any };").write("");
99-
100100
String name = symbol.getName();
101101
writer.openBlock("export class $L extends $$Command<$L, $L> {", "}", name, inputType, outputType, () -> {
102102

@@ -126,17 +126,13 @@ private void generateCommandConstructor() {
126126
.pushState(COMMAND_CONSTRUCTOR_SECTION)
127127
.write("super();")
128128
.popState()
129-
.write("// Start section: $L", COMMAND_CONSTRUCTOR_SECTION);
129+
.write("// End section: $L", COMMAND_CONSTRUCTOR_SECTION);
130130
});
131131
}
132132

133133
private void generateCommandMiddlewareResolver(String configType) {
134-
Symbol ser = Symbol.builder()
135-
.name("serializerPlugin")
136-
.namespace("@aws-sdk/middleware-serde", "/")
137-
.build();
138-
Symbol deser = Symbol.builder()
139-
.name("deserializerPlugin")
134+
Symbol serde = Symbol.builder()
135+
.name("serdePlugin")
140136
.namespace("@aws-sdk/middleware-serde", "/")
141137
.addDependency(PackageJsonGenerator.NORMAL_DEPENDENCY,
142138
"@aws-sdk/middleware-serde",
@@ -145,26 +141,25 @@ private void generateCommandMiddlewareResolver(String configType) {
145141

146142
writer.write("resolveMiddleware(")
147143
.indent()
148-
.write("clientStack: $$types.MiddlewareStack<$L, $L>,", inputType, outputType)
144+
.write("clientStack: MiddlewareStack<$L, $L>,", inputType, outputType)
149145
.write("configuration: $L,", configType)
150146
.write("options?: $T", applicationProtocol.getOptionsType())
151147
.dedent();
152-
writer.openBlock("): $$types.Handler<$L, $L> {", "}", inputType, outputType, () -> {
153-
// Add serialization and deserialization plugins.
154-
writer.write("this.use($T(configuration, this.serialize));", ser);
155-
writer.write("this.use($T<$L>(configuration, this.deserialize));", deser, outputType);
148+
writer.openBlock("): Handler<$L, $L> {", "}", inputType, outputType, () -> {
149+
// Add serialization and deserialization plugin.
150+
writer.write("this.use($T(configuration, this.serialize, this.deserialize));", serde);
156151

157152
// Add customizations.
158153
addCommandSpecificPlugins();
159154

160155
// Resolve the middleware stack.
161156
writer.write("\nconst stack = clientStack.concat(this.middlewareStack);\n");
162-
writer.openBlock("const handlerExecutionContext: $$types.HandlerExecutionContext = {", "}", () -> {
157+
writer.openBlock("const handlerExecutionContext: HandlerExecutionContext = {", "}", () -> {
163158
writer.write("logger: {} as any,");
164159
});
165160
writer.write("const { httpHandler } = configuration;");
166161
writer.openBlock("return stack.resolve(", ");", () -> {
167-
writer.write("(request: $$types.FinalizeHandlerArguments<any>) => ");
162+
writer.write("(request: FinalizeHandlerArguments<any>) => ");
168163
writer.write(" httpHandler.handle(request.request as $T, options || {}),",
169164
applicationProtocol.getRequestType());
170165
writer.write("handlerExecutionContext");
@@ -205,7 +200,7 @@ private void writeSerde() {
205200
.indent()
206201
.write("input: $L,", inputType)
207202
.write("protocol: string,")
208-
.write("utils?: Utils")
203+
.write("context: SerdeContext")
209204
.dedent()
210205
.openBlock("): $T {", "}", applicationProtocol.getRequestType(), () -> writeSerdeDispatcher("input"));
211206

@@ -214,7 +209,7 @@ private void writeSerde() {
214209
.indent()
215210
.write("output: $T,", applicationProtocol.getResponseType())
216211
.write("protocol: string,")
217-
.write("utils?: Utils")
212+
.write("context: SerdeContext")
218213
.dedent()
219214
.openBlock("): Promise<$L> {", "}", outputType, () -> writeSerdeDispatcher("output"))
220215
.write("");
@@ -226,11 +221,13 @@ private void writeSerdeDispatcher(String inputOrOutput) {
226221
// For example:
227222
// case 'aws.rest-json-1.1':
228223
// return getFooCommandAws_RestJson1_1Serialize(input, utils);
229-
//
230-
for (String protocol : settings.getProtocols()) {
224+
// TODO Validate this is the right set of protocols; settings.protocols was empty here.
225+
for (String protocol : settings.resolveServiceProtocols(service)) {
231226
String serdeFunctionName = getSerdeFunctionName(symbol, protocol, inputOrOutput);
227+
writer.addImport(serdeFunctionName, serdeFunctionName,
228+
"./protocols/" + ProtocolGenerator.getSanitizedName(protocol));
232229
writer.write("case '$L':", protocol)
233-
.write(" return $L($L, utils);", serdeFunctionName, inputOrOutput);
230+
.write(" return $L($L, context);", serdeFunctionName, inputOrOutput);
234231
}
235232

236233
writer.write("default:")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ public ServiceShape getService(Model model) {
189189
/**
190190
* Gets the explicitly configured list of protocols to generate.
191191
*
192-
* <p>Every returned protocol must utilize compatibke application protocols.
192+
* <p>Every returned protocol must utilize compatible application protocols.
193193
*
194194
* @return Returns the configured list of protocols or an empty list.
195195
*/

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private void generateOperationSerializer(GenerationContext context, OperationSha
8989

9090
// Ensure that the request type is imported.
9191
writer.addUseImports(requestType);
92-
writer.addImport("SerializerUtils", "SerializerUtils", "@aws-sdk/types");
92+
writer.addImport("SerdeContext", "SerdeContext", "@aws-sdk/types");
9393
writer.addImport("Endpoint", "__Endpoint", "@aws-sdk/types");
9494
// e.g., serializeAws_restJson1_1ExecuteStatement
9595
String serializerMethodName = "serialize" + ProtocolGenerator.getSanitizedName(getName()) + symbol.getName();
@@ -99,15 +99,15 @@ private void generateOperationSerializer(GenerationContext context, OperationSha
9999

100100
writer.openBlock("export function $L(\n"
101101
+ " input: $L,\n"
102-
+ " utils: SerializerUtils\n"
102+
+ " context: SerdeContext\n"
103103
+ "): $T {", "}", serializerMethodName, inputType, requestType, () -> {
104104
List<HttpBinding> labelBindings = writeRequestLabels(context, operation, bindingIndex, trait);
105105
List<HttpBinding> queryBindings = writeRequestQueryString(context, operation, bindingIndex);
106106
writeHeaders(context, operation, bindingIndex);
107107
List<HttpBinding> documentBindings = writeRequestBody(context, operation, bindingIndex);
108108

109109
writer.openBlock("return new $T({", "});", requestType, () -> {
110-
writer.write("...utils.endpoint,");
110+
writer.write("...context.endpoint,");
111111
writer.write("protocol: \"https\",");
112112
writer.write("method: $S,", trait.getMethod());
113113
if (labelBindings.isEmpty()) {
@@ -310,7 +310,7 @@ private void generateOperationDeserializer(GenerationContext context, OperationS
310310

311311
// Ensure that the response type is imported.
312312
writer.addUseImports(responseType);
313-
writer.addImport("DeserializerUtils", "DeserializerUtils", "@aws-sdk/types");
313+
writer.addImport("SerdeContext", "SerdeContext", "@aws-sdk/types");
314314
// e.g., deserializeAws_restJson1_1ExecuteStatement
315315
String methodName = "deserialize" + ProtocolGenerator.getSanitizedName(getName()) + symbol.getName();
316316

@@ -320,7 +320,7 @@ private void generateOperationDeserializer(GenerationContext context, OperationS
320320

321321
writer.openBlock("export function $L(\n"
322322
+ " output: $T,\n"
323-
+ " utils: DeserializerUtils\n"
323+
+ " context: SerdeContext\n"
324324
+ "): Promise<$L> {", "}", methodName, responseType, outputType, () -> {
325325
// TODO: Check status code to create appropriate error type or response type.
326326
writeHeaders(context, operation, bindingIndex);

0 commit comments

Comments
 (0)