-
Notifications
You must be signed in to change notification settings - Fork 546
/
index.ts
91 lines (85 loc) · 2.27 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import {
RequestSerializer,
SerializeHandler,
SerializeHandlerArguments,
SerializeMiddleware,
SerializeHandlerOutput,
ResponseDeserializer,
DeserializeHandler,
DeserializeHandlerArguments,
DeserializeMiddleware,
DeserializeHandlerOutput,
Protocol,
SerializerUtils,
DeserializerUtils,
InjectableMiddleware
} from "@aws-sdk/types";
export function deserializerMiddleware<
Input extends object,
Output extends object
>(
options: DeserializerMiddlewareConfig,
deserializer: ResponseDeserializer<any>
): DeserializeMiddleware<Input, Output> {
return (
next: DeserializeHandler<Input, Output>
): DeserializeHandler<Input, Output> => async (
args: DeserializeHandlerArguments<Input>
): Promise<DeserializeHandlerOutput<Output>> => {
const { response } = await next(args);
const parsed = await options.protocol.deserialize(
deserializer,
response,
options
);
return {
response,
output: parsed as Output
};
};
}
export interface DeserializerMiddlewareConfig extends DeserializerUtils {
protocol: Protocol<any, any>;
}
export function deserializerPlugin<OutputType>(
config: DeserializerMiddlewareConfig,
serializer: ResponseDeserializer<OutputType>
): InjectableMiddleware {
return {
middleware: deserializerMiddleware(config, serializer),
step: "deserialize",
tags: { DESERIALIZER: true }
};
}
export function serializerMiddleware<
Input extends object,
Output extends object
>(
options: SerializerMiddlewareConfig,
serializer: RequestSerializer<any>
): SerializeMiddleware<Input, Output> {
return (
next: SerializeHandler<Input, Output>
): SerializeHandler<Input, Output> => async (
args: SerializeHandlerArguments<Input>
): Promise<SerializeHandlerOutput<Output>> => {
const request = options.protocol.serialize(serializer, args.input, options);
return next({
...args,
request
});
};
}
export interface SerializerMiddlewareConfig extends SerializerUtils {
protocol: Protocol<any, any>;
}
export function serializerPlugin(
config: SerializerMiddlewareConfig,
serializer: RequestSerializer<any>
): InjectableMiddleware {
return {
middleware: serializerMiddleware(config, serializer),
step: "serialize",
tags: { SERIALIZER: true }
};
}