Skip to content

Commit d75c620

Browse files
AllanZhengYPtrivikr
authored andcommitted
feat: update runtime plugin interface (#400)
* feat: remove generated SerDe runtime dependencies Instead, use the runtime-specific utils specified in client config * fix: change plugin interface to callback functions mutating the stack
1 parent ff70fac commit d75c620

File tree

20 files changed

+226
-299
lines changed

20 files changed

+226
-299
lines changed

Diff for: clients/node/client-rds-data-node/RDSDataClient.ts

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { contentLengthPlugin } from "@aws-sdk/middleware-content-length";
2-
import { UserAgentPlugin, UserAgentConfig } from "@aws-sdk/middleware-user-agent";
2+
import { userAgentPlugin, UserAgentConfig } from "@aws-sdk/middleware-user-agent";
33
import { retryPlugin, RetryConfig } from "@aws-sdk/retry-middleware";
4-
import { signingPlugin, AwsAuthConfiguration } from "@aws-sdk/signing-middleware";
4+
import { awsAuthPlugin, AwsAuthConfiguration } from "@aws-sdk/signing-middleware";
55
import {
66
RDSDataConfiguration,
77
RDSDataResolvedConfiguration,
@@ -22,19 +22,17 @@ export class RDSDataClient extends SmithyClient<HttpOptions, InputTypesUnion, Ou
2222
...RDSRuntimeConfiguration,
2323
...configuration
2424
});
25-
super(intermediaConfig_0);
2625
let intermediaConfig_1 = RegionConfiguration.resolve(intermediaConfig_0);
2726
let intermediaConfig_2 = AwsAuthConfiguration.resolve(intermediaConfig_1);
2827
let intermediaConfig_3 = EndpointsConfig.resolve(intermediaConfig_2);
2928
let intermediaConfig_4 = RetryConfig.resolve(intermediaConfig_3);
3029
let intermediaConfig_5 = UserAgentConfig.resolve(intermediaConfig_4);
30+
super(intermediaConfig_0);
3131
this.config = intermediaConfig_5;
3232
super.use(contentLengthPlugin(this.config));
33-
if (this.config.maxRetries > 0) {
34-
super.use(retryPlugin(this.config));
35-
}
36-
super.use(signingPlugin(this.config));
37-
super.use(UserAgentPlugin(this.config));
33+
super.use(retryPlugin(this.config));
34+
super.use(awsAuthPlugin(this.config));
35+
super.use(userAgentPlugin(this.config));
3836
}
3937

4038
destroy(): void {

Diff for: clients/node/client-rds-data-node/commands/ExecuteStatementCommand.ts

+9-18
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import { Command } from "@aws-sdk/smithy-client";
2-
import {
3-
deserializerPlugin,
4-
serializerPlugin
5-
} from "@aws-sdk/middleware-serde";
6-
import * as __aws_sdk_types from "@aws-sdk/types";
2+
import { serdePlugin } from "@aws-sdk/middleware-serde";
3+
import { HttpOptions, Handler, HandlerExecutionContext } from "@aws-sdk/types";
74
import { RDSDataResolvedConfiguration } from "../RDSDataConfiguration";
85
import { HttpRequest } from "@aws-sdk/protocol-http";
96
import {
@@ -22,38 +19,32 @@ type OutputTypesUnion = any;
2219
export class ExecuteStatementCommand extends Command<
2320
ExecuteStatementRequest,
2421
ExecuteStatementResponse
25-
> {
22+
> {
2623
constructor(readonly input: ExecuteStatementRequest) {
2724
super();
2825
}
2926

3027
resolveMiddleware(
3128
clientStack: MiddlewareStack<InputTypesUnion, OutputTypesUnion>,
3229
configuration: RDSDataResolvedConfiguration,
33-
options?: __aws_sdk_types.HttpOptions
34-
): __aws_sdk_types.Handler<
30+
options?: HttpOptions
31+
): Handler<
3532
ExecuteStatementRequest,
3633
ExecuteStatementResponse
3734
> {
38-
const { httpHandler } = configuration;
35+
const { protocol: { handler } } = configuration;
3936

40-
this.use(serializerPlugin(configuration, executeStatementSerializer));
41-
this.use(
42-
deserializerPlugin<ExecuteStatementResponse>(
43-
configuration,
44-
executeStatementDeserializer
45-
)
46-
);
37+
this.use(serdePlugin(configuration, executeStatementSerializer, executeStatementDeserializer));
4738

4839
const stack = clientStack.concat(this.middlewareStack);
4940

50-
const handlerExecutionContext: __aws_sdk_types.HandlerExecutionContext = {
41+
const handlerExecutionContext: HandlerExecutionContext = {
5142
logger: {} as any
5243
};
5344

5445
return stack.resolve(
5546
(request: FinalizeHandlerArguments<any>) =>
56-
httpHandler.handle(request.request as HttpRequest, options || {}),
47+
handler.handle(request.request as HttpRequest, options || {}),
5748
handlerExecutionContext
5849
);
5950
}

Diff for: clients/node/client-rds-data-node/protocol/AwsRestJson1_1.ts

+46-50
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,11 @@ import {
1212
} from "../models/rdsdataservice";
1313
import { HttpRequest, HttpResponse } from "@aws-sdk/protocol-http";
1414
import { SerializerUtils, DeserializerUtils } from "@aws-sdk/types";
15-
import * as __aws_sdk_stream_collector_node from "@aws-sdk/stream-collector-node";
16-
import * as __aws_sdk_util_utf8_node from "@aws-sdk/util-utf8-node";
1715
import { ResponseMetadata } from "@aws-sdk/types";
1816

19-
type Utils = { [key: string]: any };
20-
2117
export function executeStatementAwsRestJson1_1Serialize(
2218
input: ExecuteStatementRequest,
23-
utils?: Utils
19+
utils: SerializerUtils
2420
): HttpRequest {
2521
let body: any = {};
2622
if (input.resourceArn !== undefined) {
@@ -44,7 +40,7 @@ export function executeStatementAwsRestJson1_1Serialize(
4440
}
4541

4642
if (input.parameters !== undefined) {
47-
body.parameters = sqlParameterListAwsRestJson1_1Serialize(input.parameters);
43+
body.parameters = sqlParameterListAwsRestJson1_1Serialize(input.parameters, utils);
4844
}
4945

5046
if (input.transactionId !== undefined) {
@@ -72,51 +68,54 @@ export function executeStatementAwsRestJson1_1Serialize(
7268

7369
export async function executeStatementAwsRestJson1_1Deserialize(
7470
output: HttpResponse,
75-
utils?: Utils
71+
utils: DeserializerUtils
7672
): Promise<ExecuteStatementResponse> {
7773
if (output.statusCode !== 200) {
78-
return executeStatementAwsRestJson1_1DeserializeError(output);
74+
return executeStatementAwsRestJson1_1DeserializeError(output, utils);
7975
}
8076
let data: any = await parseBody(output.body, utils);
8177
return Promise.resolve({
8278
$metadata: deserializeMetadata(output),
8379
__type: "com.amazon.rdsdataservice#ExecuteStatementResponse",
84-
records: recordsAwsRestJson1_1Deserialize(data.records),
80+
records: recordsAwsRestJson1_1Deserialize(data.records, utils),
8581
columnMetadata: columnMetadataListAwsRestJson1_1Deserialize(
86-
data.columnMetadata
82+
data.columnMetadata,
83+
utils
8784
),
8885
numberOfRecordsUpdated: data.numberOfRecordsUpdated,
8986
generatedFields: generatedFieldsAwsRestJson1_1Deserialize(
90-
data.generatedFields
87+
data.generatedFields,
88+
utils
9189
)
9290
});
9391
}
9492

9593
async function executeStatementAwsRestJson1_1DeserializeError(
96-
output: HttpResponse
94+
output: HttpResponse,
95+
utils: DeserializerUtils
9796
): Promise<ExecuteStatementResponse> {
98-
let data = await parseBody(output.body);
97+
let data = await parseBody(output.body, utils);
9998
let response: any;
10099
switch (output.headers["x-amzn-ErrorType"]) {
101100
case "BadRequestException":
102101
case "com.amazon.rdsdataservice#BadRequestException":
103-
response = badRequestExceptionDeserialize(data);
102+
response = badRequestExceptionDeserialize(data, utils);
104103
break;
105104
case "StatementTimeoutException":
106105
case "com.amazon.rdsdataservice#StatementTimeoutException":
107-
response = statementTimeoutExceptionDeserialize(data);
106+
response = statementTimeoutExceptionDeserialize(data, utils);
108107
break;
109108
case "ForbiddenException":
110109
case "com.amazon.rdsdataservice#ForbiddenException":
111-
response = forbiddenExceptionDeserialize(data);
110+
response = forbiddenExceptionDeserialize(data, utils);
112111
break;
113112
case "InternalServerErrorException":
114113
case "com.amazon.rdsdataservice#InternalServerErrorException":
115-
response = internalServerErrorExceptionDeserialize(data);
114+
response = internalServerErrorExceptionDeserialize(data, utils);
116115
break;
117116
case "ServiceUnavailableError":
118117
case "com.amazon.rdsdataservice#ServiceUnavailableError":
119-
response = serviceUnavailableErrorDeserialize(data);
118+
response = serviceUnavailableErrorDeserialize(data, utils);
120119
break;
121120
default:
122121
response = {
@@ -130,19 +129,20 @@ async function executeStatementAwsRestJson1_1DeserializeError(
130129
}
131130

132131
const sqlParameterListAwsRestJson1_1Serialize = (
133-
input: Array<SqlParameter>
132+
input: Array<SqlParameter>,
133+
utils: SerializerUtils
134134
): Array<SqlParameter> =>
135135
input &&
136-
input.map(sqlParameter => sqlParameterAwsRestJson1_1Serialize(sqlParameter));
136+
input.map(sqlParameter => sqlParameterAwsRestJson1_1Serialize(sqlParameter, utils));
137137

138-
const sqlParameterAwsRestJson1_1Serialize = (input: SqlParameter): any =>
138+
const sqlParameterAwsRestJson1_1Serialize = (input: SqlParameter, utils: SerializerUtils): any =>
139139
input.name &&
140140
input.value && {
141141
name: input.name,
142-
value: fieldAwsRestJson1_1Serialize(input.value)
142+
value: fieldAwsRestJson1_1Serialize(input.value, utils)
143143
};
144144

145-
const fieldAwsRestJson1_1Serialize = (input: Field): any =>
145+
const fieldAwsRestJson1_1Serialize = (input: Field, utils: SerializerUtils): any =>
146146
Field.visit(input, {
147147
blobValue: value => {
148148
value;
@@ -174,7 +174,8 @@ const fieldAwsRestJson1_1Serialize = (input: Field): any =>
174174
});
175175

176176
export function columnMetadataAwsRestJson1_1Deserialize(
177-
input: any
177+
input: any,
178+
utils: DeserializerUtils
178179
): ColumnMetadata {
179180
let columnMetadata: any = {
180181
$namespace: "com.amazon.rdsdataservice",
@@ -240,14 +241,15 @@ export function columnMetadataAwsRestJson1_1Deserialize(
240241
}
241242

242243
const columnMetadataListAwsRestJson1_1Deserialize = (
243-
input: any
244+
input: any,
245+
utils: DeserializerUtils
244246
): Array<ColumnMetadata> =>
245247
input &&
246248
input.map((columnMetadata: any) =>
247-
columnMetadataAwsRestJson1_1Deserialize(columnMetadata)
249+
columnMetadataAwsRestJson1_1Deserialize(columnMetadata, utils)
248250
);
249251

250-
const fieldAwsRestJson1_1Deserialize = (input: any): any =>
252+
const fieldAwsRestJson1_1Deserialize = (input: any, utils: DeserializerUtils): any =>
251253
Field.visit(input, {
252254
blobValue: value => {
253255
value;
@@ -278,27 +280,28 @@ const fieldAwsRestJson1_1Deserialize = (input: any): any =>
278280
}
279281
});
280282

281-
const generatedFieldsAwsRestJson1_1Deserialize = (input: any): Array<Field> =>
282-
input && input.map((field: any) => fieldAwsRestJson1_1Deserialize(field));
283+
const generatedFieldsAwsRestJson1_1Deserialize = (input: any, utils: DeserializerUtils): Array<Field> =>
284+
input && input.map((field: any) => fieldAwsRestJson1_1Deserialize(field, utils));
283285

284-
const recordsAwsRestJson1_1Deserialize = (input: any): Array<Array<Field>> =>
286+
const recordsAwsRestJson1_1Deserialize = (input: any, utils: DeserializerUtils): Array<Array<Field>> =>
285287
input &&
286288
input.map((recordsList: any) =>
287-
recordsListAwsRestJson1_1Deserialize(recordsList)
289+
recordsListAwsRestJson1_1Deserialize(recordsList, utils)
288290
);
289291

290-
const recordsListAwsRestJson1_1Deserialize = (input: any): Array<Field> =>
291-
input && input.map((field: any) => fieldAwsRestJson1_1Deserialize(field));
292+
const recordsListAwsRestJson1_1Deserialize = (input: any, utils: DeserializerUtils): Array<Field> =>
293+
input && input.map((field: any) => fieldAwsRestJson1_1Deserialize(field, utils));
292294

293-
const badRequestExceptionDeserialize = (input: any): BadRequestException => ({
295+
const badRequestExceptionDeserialize = (input: any, utils: DeserializerUtils): BadRequestException => ({
294296
__type: "com.amazon.rdsdataservice#BadRequestException",
295297
$name: "BadRequestException",
296298
$fault: "client",
297299
message: input.message
298300
});
299301

300302
const statementTimeoutExceptionDeserialize = (
301-
input: any
303+
input: any,
304+
utils: DeserializerUtils
302305
): StatementTimeoutException => ({
303306
__type: "com.amazon.rdsdataservice#StatementTimeoutException",
304307
$name: "StatementTimeoutException",
@@ -307,23 +310,25 @@ const statementTimeoutExceptionDeserialize = (
307310
dbConnectionId: input.dbConnectionId
308311
});
309312

310-
const forbiddenExceptionDeserialize = (input: any): ForbiddenException => ({
313+
const forbiddenExceptionDeserialize = (input: any, utils: DeserializerUtils): ForbiddenException => ({
311314
__type: "com.amazon.rdsdataservice#ForbiddenException",
312315
$name: "ForbiddenException",
313316
$fault: "client",
314317
message: input.message
315318
});
316319

317320
const internalServerErrorExceptionDeserialize = (
318-
input: any
321+
input: any,
322+
utils: DeserializerUtils
319323
): InternalServerErrorException => ({
320324
__type: "com.amazon.rdsdataservice#InternalServerErrorException",
321325
$name: "InternalServerErrorException",
322326
$fault: "server"
323327
});
324328

325329
const serviceUnavailableErrorDeserialize = (
326-
input: any
330+
input: any,
331+
utils: DeserializerUtils
327332
): ServiceUnavailableError => ({
328333
__type: "com.amazon.rdsdataservice#ServiceUnavailableError",
329334
$name: "ServiceUnavailableError",
@@ -336,17 +341,8 @@ const deserializeMetadata = (output: HttpResponse): ResponseMetadata => ({
336341
requestId: output.headers["x-amzn-requestid"]
337342
});
338343

339-
const parseBody = (streamBody: any, utils?: Utils): any => {
340-
const streamCollector =
341-
utils && utils["streamCollector"]
342-
? (<DeserializerUtils>utils)["streamCollector"]
343-
: __aws_sdk_stream_collector_node.streamCollector;
344-
const toUtf8 =
345-
utils && utils["streamCollector"]
346-
? (<DeserializerUtils>utils)["utf8Encoder"]
347-
: __aws_sdk_util_utf8_node.toUtf8;
348-
349-
return streamCollector(streamBody).then(body => {
350-
return JSON.parse(toUtf8(body));
344+
const parseBody = (streamBody: any, utils: DeserializerUtils): any => {
345+
return utils.streamCollector(streamBody).then(body => {
346+
return JSON.parse(utils.utf8Encoder(body));
351347
});
352348
};

Diff for: clients/node/client-rds-data-node/protocol/ExecuteStatement.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { HttpRequest, HttpResponse } from "@aws-sdk/protocol-http";
2+
import { SerializerUtils, DeserializerUtils } from "@aws-sdk/types";
23
import {
34
ExecuteStatementRequest,
45
ExecuteStatementResponse
@@ -8,12 +9,10 @@ import {
89
executeStatementAwsRestJson1_1Deserialize
910
} from "./AwsRestJson1_1";
1011

11-
type Utils = { [key: string]: any };
12-
1312
export function executeStatementSerializer(
1413
input: ExecuteStatementRequest,
1514
protocol: string,
16-
utils?: Utils
15+
utils: SerializerUtils
1716
): HttpRequest {
1817
switch (protocol) {
1918
case "aws.rest-json-1.1":
@@ -26,7 +25,7 @@ export function executeStatementSerializer(
2625
export async function executeStatementDeserializer(
2726
output: HttpResponse,
2827
protocol: string,
29-
utils?: Utils
28+
utils: DeserializerUtils
3029
): Promise<ExecuteStatementResponse> {
3130
switch (protocol) {
3231
case "aws.rest-json-1.1":

Diff for: packages/middleware-content-length/src/index.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
BodyLengthCalculator,
66
MetadataBearer,
77
BuildHandlerOutput,
8-
InjectableMiddleware
8+
Injectable
99
} from "@aws-sdk/types";
1010
import { HttpRequest } from "@aws-sdk/protocol-http";
1111

@@ -44,12 +44,11 @@ export function contentLengthMiddleware(
4444
};
4545
}
4646

47-
export function contentLengthPlugin(options: {
47+
export const contentLengthPlugin = (options: {
4848
bodyLengthChecker: BodyLengthCalculator;
49-
}): InjectableMiddleware {
50-
return {
51-
middleware: contentLengthMiddleware(options.bodyLengthChecker),
49+
}): Injectable<any, any> => clientStack => {
50+
clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), {
5251
step: "build",
5352
tags: { SET_CONTENT_LENGTH: true }
54-
};
55-
}
53+
});
54+
};

0 commit comments

Comments
 (0)