From 5e26e30fa07a98890b879666e0ad05b37e253035 Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 14 Oct 2025 14:28:53 -0400 Subject: [PATCH] chore(core/protocols): use static schema --- .../cbor/AwsSmithyRpcV2CborProtocol.spec.ts | 9 +- .../protocols/idempotencyToken.spec.ts | 12 ++- .../protocols/json/AwsJson1_0Protocol.spec.ts | 39 ++++++--- .../protocols/json/AwsJson1_1Protocol.spec.ts | 13 ++- .../protocols/json/AwsJsonRpcProtocol.spec.ts | 20 +++-- .../protocols/json/AwsJsonRpcProtocol.ts | 2 +- .../json/AwsRestJsonProtocol.spec.ts | 87 +++++++++++-------- .../schema-testing/schema-documents.spec.ts | 47 ++++++---- .../submodules/protocols/test-schema.spec.ts | 44 ++++++---- .../protocols/xml/AwsRestXmlProtocol.spec.ts | 24 ++++- .../protocols/xml/AwsRestXmlProtocol.ts | 3 +- 11 files changed, 195 insertions(+), 105 deletions(-) diff --git a/packages/core/src/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.spec.ts b/packages/core/src/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.spec.ts index fe6f83976e41..dd940adfc710 100644 --- a/packages/core/src/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.spec.ts +++ b/packages/core/src/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.spec.ts @@ -1,5 +1,4 @@ import { cbor } from "@smithy/core/cbor"; -import { op } from "@smithy/core/schema"; import { error as registerError } from "@smithy/core/schema"; import { HttpResponse } from "@smithy/protocol-http"; import type { NumericSchema, StringSchema } from "@smithy/types"; @@ -32,7 +31,13 @@ describe(AwsSmithyRpcV2CborProtocol.name, () => { const error = await (async () => { return protocol.deserializeResponse( - op("ns", "Operation", 0, "unit", "unit"), + { + namespace: "ns", + name: "Operation", + traits: 0, + input: "unit", + output: "unit", + }, {} as any, new HttpResponse({ statusCode: 400, diff --git a/packages/core/src/submodules/protocols/idempotencyToken.spec.ts b/packages/core/src/submodules/protocols/idempotencyToken.spec.ts index f9ef6233b8a2..d408f11e6272 100644 --- a/packages/core/src/submodules/protocols/idempotencyToken.spec.ts +++ b/packages/core/src/submodules/protocols/idempotencyToken.spec.ts @@ -1,5 +1,5 @@ import { CborShapeSerializer } from "@smithy/core/cbor"; -import { sim, struct } from "@smithy/core/schema"; +import { StaticSimpleSchema, StaticStructureSchema } from "@smithy/types"; import { describe, expect, test as it } from "vitest"; import { JsonShapeSerializer } from "./json/JsonShapeSerializer"; @@ -7,13 +7,17 @@ import { QueryShapeSerializer } from "./query/QueryShapeSerializer"; import { XmlShapeSerializer } from "./xml/XmlShapeSerializer"; describe("idempotencyToken", () => { - const structureSchema = struct( + const structureSchema = [ + 3, "ns", "StructureWithIdempotencyToken", 0, ["idempotencyToken", "plain"], - [sim("ns", "IdempotencyTokenString", 0, 0b0100), sim("ns", "PlainString", 0, 0b0000)] - ); + [ + [0, "ns", "IdempotencyTokenString", 0b0100, 0] satisfies StaticSimpleSchema, + [0, "ns", "PlainString", 0b0000, 0] satisfies StaticSimpleSchema, + ], + ] satisfies StaticStructureSchema; it("all ShapeSerializer implementations should generate an idempotency token if no input was provided by the caller", () => { const serializers = [ diff --git a/packages/core/src/submodules/protocols/json/AwsJson1_0Protocol.spec.ts b/packages/core/src/submodules/protocols/json/AwsJson1_0Protocol.spec.ts index ae9e63ee67d7..30e1e28b33a7 100644 --- a/packages/core/src/submodules/protocols/json/AwsJson1_0Protocol.spec.ts +++ b/packages/core/src/submodules/protocols/json/AwsJson1_0Protocol.spec.ts @@ -1,9 +1,10 @@ -import { map, op, sim, struct } from "@smithy/core/schema"; import type { BlobSchema, BooleanSchema, DocumentSchema, NumericSchema, + OperationSchema, + StaticStructureSchema, StringSchema, TimestampDefaultSchema, } from "@smithy/types"; @@ -22,7 +23,8 @@ describe(AwsJson1_0Protocol.name, () => { blob: "AAAAAAAAAAA=", timestamp: 0, }; - const schema = struct( + const schema: StaticStructureSchema = [ + 3, "ns", "MyStruct", 0, @@ -33,8 +35,8 @@ describe(AwsJson1_0Protocol.name, () => { 2 satisfies BooleanSchema, 21 satisfies BlobSchema, 4 satisfies TimestampDefaultSchema, - ] - ); + ], + ]; const serdeContext = { base64Encoder: toBase64, utf8Encoder: toUtf8, @@ -93,27 +95,36 @@ describe(AwsJson1_0Protocol.name, () => { }); protocol.setSerdeContext(serdeContext); - const schema = struct( + const schema: StaticStructureSchema = [ + 3, "ns", "MyHttpBindingStructure", {}, ["header", "query", "headerMap", "payload"], [ - sim("ns", "MyHeader", 0 satisfies StringSchema, { httpHeader: "header", jsonName: "MyHeader" }), - sim("ns", "MyQuery", 0 satisfies StringSchema, { httpQuery: "query" }), - map( + [0, "ns", "MyHeader", { httpHeader: "header", jsonName: "MyHeader" }, 0 satisfies StringSchema], + [0, "ns", "MyQuery", { httpQuery: "query" }, 0 satisfies StringSchema], + [ + 2, "ns", "HeaderMap", { httpPrefixHeaders: "", }, 0 satisfies StringSchema, - 1 satisfies NumericSchema - ), - sim("ns", "MyPayload", 15 satisfies DocumentSchema, { httpPayload: 1 }), - ] - ); - const operationSchema = op("ns", "MyOperation", {}, schema, "unit"); + 1 satisfies NumericSchema, + ], + [0, "ns", "MyPayload", { httpPayload: 1 }, 15 satisfies DocumentSchema], + ], + ]; + + const operationSchema: OperationSchema = { + namespace: "ns", + name: "MyOperation", + traits: {}, + input: schema, + output: "unit", + }; const request = await protocol.serializeRequest( operationSchema, diff --git a/packages/core/src/submodules/protocols/json/AwsJson1_1Protocol.spec.ts b/packages/core/src/submodules/protocols/json/AwsJson1_1Protocol.spec.ts index 1d4c5ba60204..56df59c9bd86 100644 --- a/packages/core/src/submodules/protocols/json/AwsJson1_1Protocol.spec.ts +++ b/packages/core/src/submodules/protocols/json/AwsJson1_1Protocol.spec.ts @@ -8,6 +8,15 @@ import { AwsJson1_1Protocol } from "./AwsJson1_1Protocol"; * These tests are cursory since most coverage is provided by protocol tests. */ describe(AwsJson1_1Protocol, () => { + const [, namespace, name, traits, input, output] = deleteObjects; + const deleteObjectsOperation = { + namespace, + name, + traits, + input, + output, + }; + it("is 1.0", async () => { const protocol = new AwsJson1_1Protocol({ defaultNamespace: "", @@ -22,7 +31,7 @@ describe(AwsJson1_1Protocol, () => { serviceTarget: "JsonRpc11", }); const httpRequest = await protocol.serializeRequest( - deleteObjects, + deleteObjectsOperation, { Delete: { Objects: [ @@ -66,7 +75,7 @@ describe(AwsJson1_1Protocol, () => { serviceTarget: "JsonRpc11", }); - const output = await protocol.deserializeResponse(deleteObjects, context, httpResponse); + const output = await protocol.deserializeResponse(deleteObjectsOperation, context, httpResponse); expect(output).toEqual({ $metadata: { diff --git a/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.spec.ts b/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.spec.ts index 5c62d58b2e8e..9d4369d1eaf9 100644 --- a/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.spec.ts +++ b/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.spec.ts @@ -1,6 +1,6 @@ -import { error as registerError, op } from "@smithy/core/schema"; +import { TypeRegistry } from "@smithy/core/schema"; import { HttpResponse } from "@smithy/protocol-http"; -import type { NumericSchema, StringSchema, TimestampEpochSecondsSchema } from "@smithy/types"; +import type { NumericSchema, StaticErrorSchema, StringSchema, TimestampEpochSecondsSchema } from "@smithy/types"; import { fromUtf8 } from "@smithy/util-utf8"; import { describe, expect, test as it } from "vitest"; @@ -35,14 +35,16 @@ describe(AwsJsonRpcProtocol.name, () => { it("should support awsQueryCompatible", async () => { class MyQueryError extends Error {} - registerError( + const errorSchema: StaticErrorSchema = [ + -3, "ns", "MyQueryError", { error: "client" }, ["Message", "Prop2"], [0 satisfies StringSchema, 1 satisfies NumericSchema], - MyQueryError - ); + ]; + + TypeRegistry.for(`${errorSchema[1]}#${errorSchema[2]}`).registerError(errorSchema, MyQueryError); const body = fromUtf8( JSON.stringify({ @@ -53,7 +55,13 @@ describe(AwsJsonRpcProtocol.name, () => { const error = await (async () => { return protocol.deserializeResponse( - op("ns", "Operation", 0, "unit", "unit"), + { + namespace: "ns", + name: "Operation", + traits: 0, + input: "unit", + output: "unit", + }, {} as any, new HttpResponse({ statusCode: 400, diff --git a/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.ts b/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.ts index 90495513066c..95e313e43c17 100644 --- a/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.ts +++ b/packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.ts @@ -64,7 +64,7 @@ export abstract class AwsJsonRpcProtocol extends RpcProtocol { } Object.assign(request.headers, { "content-type": `application/x-amz-json-${this.getJsonRpcVersion()}`, - "x-amz-target": `${this.serviceTarget}.${NormalizedSchema.of(operationSchema).getName()}`, + "x-amz-target": `${this.serviceTarget}.${operationSchema.name}`, }); if (this.awsQueryCompatible) { request.headers["x-amzn-query-mode"] = "true"; diff --git a/packages/core/src/submodules/protocols/json/AwsRestJsonProtocol.spec.ts b/packages/core/src/submodules/protocols/json/AwsRestJsonProtocol.spec.ts index 47d5084f4d45..8ffd8b6d47df 100644 --- a/packages/core/src/submodules/protocols/json/AwsRestJsonProtocol.spec.ts +++ b/packages/core/src/submodules/protocols/json/AwsRestJsonProtocol.spec.ts @@ -1,10 +1,12 @@ -import { op, sim, struct } from "@smithy/core/schema"; import { HttpResponse } from "@smithy/protocol-http"; import type { BlobSchema, BooleanSchema, MapSchemaModifier, NumericSchema, + StaticOperationSchema, + StaticSimpleSchema, + StaticStructureSchema, StringSchema, TimestampDateTimeSchema, TimestampDefaultSchema, @@ -26,7 +28,8 @@ describe(AwsRestJsonProtocol.name, () => { blob: "AAAAAAAAAAA=", timestamp: 0, }; - const schema = struct( + const schema: StaticStructureSchema = [ + 3, "ns", "MyStruct", 0, @@ -37,8 +40,8 @@ describe(AwsRestJsonProtocol.name, () => { 2 satisfies BooleanSchema, 21 satisfies BlobSchema, 4 satisfies TimestampDefaultSchema, - ] - ); + ], + ]; const serdeContext = { base64Encoder: toBase64, utf8Encoder: toUtf8, @@ -94,11 +97,13 @@ describe(AwsRestJsonProtocol.name, () => { }); protocol.setSerdeContext(serdeContext); - const operationSchema = op( + const operationSchema: StaticOperationSchema = [ + 9, "ns", "MyOperation", {}, - struct( + [ + 3, "ns", "MyHttpBindingStructureRequest", {}, @@ -113,7 +118,8 @@ describe(AwsRestJsonProtocol.name, () => { }, ], [ - struct( + [ + 3, "ns", "PayloadStruct", 0, @@ -121,13 +127,14 @@ describe(AwsRestJsonProtocol.name, () => { [ [0 satisfies StringSchema, 0], [0 satisfies StringSchema, { jsonName: "JSON_NAME" }], - ] - ), + ], + ], { httpPayload: 1 }, ], - ] - ), - struct( + ], + ], + [ + 3, "ns", "MyHttpBindingStructureResponse", {}, @@ -142,7 +149,8 @@ describe(AwsRestJsonProtocol.name, () => { }, ], [ - struct( + [ + 3, "ns", "PayloadStruct", { httpPayload: 1 }, @@ -150,17 +158,23 @@ describe(AwsRestJsonProtocol.name, () => { [ [0 satisfies StringSchema, 0], [0 satisfies StringSchema, { jsonName: "JSON_NAME" }], - ] - ), + ], + ], { httpPayload: 1 }, ], - ] - ) - ); + ], + ], + ]; it("obeys jsonName and HTTP bindings during serialization", async () => { const request = await protocol.serializeRequest( - operationSchema, + { + namespace: operationSchema[1], + name: operationSchema[2], + traits: operationSchema[3], + input: operationSchema[4], + output: operationSchema[5], + }, { header: "hello", query: "world", @@ -192,7 +206,13 @@ describe(AwsRestJsonProtocol.name, () => { it("obeys jsonName and HTTP bindings and deserialization", async () => { const output = await protocol.deserializeResponse( - operationSchema, + { + namespace: operationSchema[1], + name: operationSchema[2], + traits: operationSchema[3], + input: operationSchema[4], + output: operationSchema[5], + }, {} as any, new HttpResponse({ statusCode: 200, @@ -229,11 +249,12 @@ describe(AwsRestJsonProtocol.name, () => { it("selects the correct timestamp format based on http binding location", async () => { const request = await protocol.serializeRequest( - op( - "ns", - "", - 0, - struct( + { + namespace: "ns", + name: "", + traits: 0, + input: [ + 3, "ns", "", 0, @@ -252,20 +273,17 @@ describe(AwsRestJsonProtocol.name, () => { [6 satisfies TimestampHttpDateSchema, { httpHeader: "header-http-date" }], [7 satisfies TimestampEpochSecondsSchema, { httpHeader: "header-epoch-seconds" }], [ - sim("ns", "", 7 satisfies TimestampEpochSecondsSchema, 0), + [0, "ns", "", 0, 7 satisfies TimestampEpochSecondsSchema] satisfies StaticSimpleSchema, { httpHeader: "header-target-trait-date", }, ], [4 satisfies TimestampDefaultSchema, { httpQuery: "query-default-date" }], - [ - struct("ns", "date", 0, ["payloadDefaultDate"], [4 satisfies TimestampDefaultSchema]), - { httpPayload: 1 }, - ], - ] - ), - "unit" - ), + [[3, "ns", "date", 0, ["payloadDefaultDate"], [4 satisfies TimestampDefaultSchema]], { httpPayload: 1 }], + ], + ], + output: "unit", + }, { headerDefaultDate: new Date(0), headerMemberTraitDate: new Date(0), @@ -279,7 +297,6 @@ describe(AwsRestJsonProtocol.name, () => { }, context ); - expect(request.body).toEqual(`{"payloadDefaultDate":0}`); expect(request.headers).toEqual({ diff --git a/packages/core/src/submodules/protocols/schema-testing/schema-documents.spec.ts b/packages/core/src/submodules/protocols/schema-testing/schema-documents.spec.ts index 4fdb19b82f3d..4f8f92d89f6f 100644 --- a/packages/core/src/submodules/protocols/schema-testing/schema-documents.spec.ts +++ b/packages/core/src/submodules/protocols/schema-testing/schema-documents.spec.ts @@ -1,4 +1,4 @@ -import { list, map, NormalizedSchema, sim, struct, TypeRegistry } from "@smithy/core/schema"; +import { NormalizedSchema, TypeRegistry } from "@smithy/core/schema"; import type { BigDecimalSchema, BigIntegerSchema, @@ -7,6 +7,10 @@ import type { DocumentSchema, DocumentType, NumericSchema, + StaticListSchema, + StaticMapSchema, + StaticSimpleSchema, + StaticStructureSchema, StringSchema, TimestampDateTimeSchema, TimestampDefaultSchema, @@ -20,7 +24,8 @@ import { JsonShapeDeserializer } from "../json/JsonShapeDeserializer"; import { testCases } from "./new-document-type-test-cases.spec"; /* eslint no-var: 0 */ -export var OmniWidget = struct( +export var OmniWidget: StaticStructureSchema = [ + 3, "smithy.example", "OmniWidget", 0, @@ -50,15 +55,21 @@ export var OmniWidget = struct( [ 21 satisfies BlobSchema, 2 satisfies BooleanSchema, - sim("smithy.api", "String", 0, { - jsonName: "String", - xmlName: "String", - }), - sim("smithy.api", "Byte", 1 satisfies NumericSchema, 0), - sim("smithy.api", "Short", 1 satisfies NumericSchema, 0), - sim("smithy.api", "Integer", 1 satisfies NumericSchema, 0), - sim("smithy.api", "Long", 1 satisfies NumericSchema, 0), - sim("smithy.api", "Float", 1 satisfies NumericSchema, 0), + [ + 0, + "smithy.api", + "String", + { + jsonName: "String", + xmlName: "String", + }, + 0, + ] satisfies StaticSimpleSchema, + [0, "smithy.api", "Byte", 0, 1 satisfies NumericSchema] satisfies StaticSimpleSchema, + [0, "smithy.api", "Short", 0, 1 satisfies NumericSchema] satisfies StaticSimpleSchema, + [0, "smithy.api", "Integer", 0, 1 satisfies NumericSchema] satisfies StaticSimpleSchema, + [0, "smithy.api", "Long", 0, 1 satisfies NumericSchema] satisfies StaticSimpleSchema, + [0, "smithy.api", "Float", 0, 1 satisfies NumericSchema] satisfies StaticSimpleSchema, 1 satisfies NumericSchema, // double 17 satisfies BigIntegerSchema, 19 satisfies BigDecimalSchema, @@ -67,15 +78,15 @@ export var OmniWidget = struct( 6 satisfies TimestampHttpDateSchema, 7 satisfies TimestampEpochSecondsSchema, 15 satisfies DocumentSchema, - sim("smithy.api", "Enum", 0 satisfies StringSchema, 0), - sim("smithy.api", "IntEnum", 1 satisfies NumericSchema, 0), - list("smithy.example", "OmniWidgetList", 0, () => OmniWidget), - map("smithy.example", "OmniWidgetMap", 0, 0, () => OmniWidget), + [0, "smithy.api", "Enum", 0 satisfies StringSchema, 0], + [0, "smithy.api", "IntEnum", 1 satisfies NumericSchema, 0], + [1, "smithy.example", "OmniWidgetList", 0, () => OmniWidget] satisfies StaticListSchema, + [2, "smithy.example", "OmniWidgetMap", 0, 0, () => OmniWidget] satisfies StaticMapSchema, () => OmniWidget, - ] -); + ], +]; -TypeRegistry.for(OmniWidget.namespace).register(OmniWidget.getName(), OmniWidget); +TypeRegistry.for(OmniWidget[1]).register(`${OmniWidget[1]}#${OmniWidget[2]}`, OmniWidget); function getJsonCodec(test: { settings: JsonSettings }): JsonCodec { const { settings } = test; diff --git a/packages/core/src/submodules/protocols/test-schema.spec.ts b/packages/core/src/submodules/protocols/test-schema.spec.ts index ee5a7185b228..81d7e557910c 100644 --- a/packages/core/src/submodules/protocols/test-schema.spec.ts +++ b/packages/core/src/submodules/protocols/test-schema.spec.ts @@ -1,9 +1,11 @@ -import { list, map, op, sim, struct } from "@smithy/core/schema"; import type { BigDecimalSchema, BigIntegerSchema, BlobSchema, NumericSchema, + StaticListSchema, + StaticOperationSchema, + StaticStructureSchema, TimestampEpochSecondsSchema, } from "@smithy/types"; import { describe, test as it } from "vitest"; @@ -12,59 +14,63 @@ describe("testing schema export", () => { it("placeholder", () => {}); }); -export const widget = struct( +export const widget = [ + 3, "", "Struct", 0, ["list", "sparseList", "map", "sparseMap", "blob", "media", "timestamp", "bigint", "bigdecimal", "scalar"], [ - [list("", "List", 0, 0), 0], - [list("", "List", 0, 0), { sparse: 1 }], - map("", "Map", 0, 0, 0), - [map("", "Map", 0, 0, 0), { sparse: 1 }], + [[1, "", "List", 0, 0] satisfies StaticListSchema, 0], + [[1, "", "List", 0, 0] satisfies StaticListSchema, { sparse: 1 }], + [2, "", "Map", 0, 0, 0], + [[2, "", "Map", 0, 0, 0], { sparse: 1 }], 21 satisfies BlobSchema, - sim("", "Media", 0, { mediaType: "application/json" }), + [0, "", "Media", { mediaType: "application/json" }, 0], 7 satisfies TimestampEpochSecondsSchema, 17 satisfies BigIntegerSchema, 19 satisfies BigDecimalSchema, 1 satisfies NumericSchema, - ] -); + ], +] satisfies StaticStructureSchema; -export const deleteObjects = op( +export const deleteObjects: StaticOperationSchema = [ + 9, "ns", "DeleteObjects", { http: ["POST", "/{Bucket}?delete", 200], }, - struct( + [ + 3, "ns", "DeleteObjectsRequest", {}, ["Delete"], [ [ - struct( + [ + 3, "ns", "Delete", 0, ["Objects"], [ [ - list("ns", "ObjectIdentifierList", 0, struct("ns", "ObjectIdentifier", 0, ["Key"], [[0, 0]])), + [1, "ns", "ObjectIdentifierList", 0, [3, "ns", "ObjectIdentifier", 0, ["Key"], [[0, 0]]]], { xmlFlattened: 1, xmlName: "Object" }, ], - ] - ), + ], + ], { httpPayload: 1, xmlName: "Delete", }, ], - ] - ), - struct("ns", "DeleteObjectsResponse", 0, [], []) -); + ], + ], + [3, "ns", "DeleteObjectsResponse", 0, [], []] satisfies StaticStructureSchema, +] satisfies StaticOperationSchema; export const context = { async endpoint() { diff --git a/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.spec.ts b/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.spec.ts index ded37f44705a..50d52576ae2f 100644 --- a/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.spec.ts +++ b/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.spec.ts @@ -1,4 +1,5 @@ import { HttpRequest, HttpResponse } from "@smithy/protocol-http"; +import { StaticOperationSchema } from "@smithy/types"; import { toUtf8 } from "@smithy/util-utf8"; import { describe, expect, test as it } from "vitest"; @@ -15,7 +16,7 @@ describe(AwsRestXmlProtocol.name, () => { const testCases = [ { name: "DeleteObjects", - schema: command.schema?.input, + schema: command.schema[4], input: { Delete: { Objects: [ @@ -61,7 +62,14 @@ describe(AwsRestXmlProtocol.name, () => { xmlNamespace: "http://s3.amazonaws.com/doc/2006-03-01/", defaultNamespace: "com.amazonaws.s3", }); - const httpRequest = await protocol.serializeRequest(command.schema!, testCase.input, context); + + const [, namespace, name, traits, input, output] = command.schema as StaticOperationSchema; + + const httpRequest = await protocol.serializeRequest( + { namespace, name, traits, input, output }, + testCase.input, + context + ); const body = httpRequest.body; httpRequest.body = void 0; @@ -99,7 +107,17 @@ describe(AwsRestXmlProtocol.name, () => { xmlNamespace: "ns", }); - const output = await protocol.deserializeResponse(deleteObjects, context, httpResponse); + const output = await protocol.deserializeResponse( + { + namespace: deleteObjects[1], + name: deleteObjects[2], + traits: deleteObjects[3], + input: deleteObjects[4], + output: deleteObjects[5], + }, + context, + httpResponse + ); expect(output).toEqual({ $metadata: { diff --git a/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.ts b/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.ts index f9037a5a96c1..1fab14712265 100644 --- a/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.ts +++ b/packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.ts @@ -3,13 +3,14 @@ import { HttpInterceptingShapeDeserializer, HttpInterceptingShapeSerializer, } from "@smithy/core/protocols"; -import { NormalizedSchema, OperationSchema, TypeRegistry } from "@smithy/core/schema"; +import { NormalizedSchema, TypeRegistry } from "@smithy/core/schema"; import type { EndpointBearer, HandlerExecutionContext, HttpRequest as IHttpRequest, HttpResponse as IHttpResponse, MetadataBearer, + OperationSchema, ResponseMetadata, SerdeFunctions, ShapeDeserializer,