import { DeserializeHandlerOptions, Endpoint, EndpointBearer, MetadataBearer, MiddlewareStack, Pluggable, Provider, RequestSerializer, ResponseDeserializer, SerializeHandlerOptions, UrlParser, } from "@smithy/types"; import { deserializerMiddleware } from "./deserializerMiddleware"; import { serializerMiddleware } from "./serializerMiddleware"; export const deserializerMiddlewareOption: DeserializeHandlerOptions = { name: "deserializerMiddleware", step: "deserialize", tags: ["DESERIALIZER"], override: true, }; export const serializerMiddlewareOption: SerializeHandlerOptions = { name: "serializerMiddleware", step: "serialize", tags: ["SERIALIZER"], override: true, }; // Type the modifies the EndpointBearer to make it compatible with Endpoints 2.0 change. // Must be removed after all clients has been onboard the Endpoints 2.0 export type V1OrV2Endpoint = { // for v2 urlParser?: UrlParser; // for v1 endpoint?: Provider; }; export function getSerdePlugin( config: V1OrV2Endpoint, serializer: RequestSerializer, deserializer: ResponseDeserializer ): Pluggable { return { applyToStack: (commandStack: MiddlewareStack) => { commandStack.add(deserializerMiddleware(config as SerDeContext, deserializer), deserializerMiddlewareOption); commandStack.add(serializerMiddleware(config, serializer), serializerMiddlewareOption); }, }; }