diff --git a/tools/code-generation/protocol-tests/api-descriptions/ec2-protocol-2020-01-08.normal.json b/tools/code-generation/protocol-tests/api-descriptions/ec2-protocol-2020-01-08.normal.json new file mode 100644 index 00000000000..735bdcf8b94 --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/ec2-protocol-2020-01-08.normal.json @@ -0,0 +1,960 @@ +{ + "version": "2.0", + "metadata": { + "apiVersion": "2020-01-08", + "auth": [ + "aws.auth#sigv4" + ], + "endpointPrefix": "ec2query", + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "serviceFullName": "Sample Ec2 Protocol Service", + "serviceId": "EC2 Protocol", + "signatureVersion": "v4", + "signingName": "ec2query", + "uid": "ec2-protocol-2020-01-08" + }, + "operations": { + "DatetimeOffsets": { + "name": "DatetimeOffsets", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "DatetimeOffsetsOutput" + } + }, + "EmptyInputAndEmptyOutput": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "EmptyInputAndEmptyOutputInput" + }, + "output": { + "shape": "EmptyInputAndEmptyOutputOutput" + }, + "documentation": "
The example tests how requests and responses are serialized when there's no request or response members.
While this should be rare, code generators must support this.
" + }, + "EndpointOperation": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "EndpointWithHostLabelOperation": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "HostLabelInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "FractionalSeconds": { + "name": "FractionalSeconds", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "FractionalSecondsOutput" + } + }, + "GreetingWithErrors": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "GreetingWithErrorsOutput" + }, + "errors": [ + { + "shape": "ComplexError" + }, + { + "shape": "InvalidGreeting" + } + ], + "documentation": "This operation has three possible return values:
The xmlName trait on the output structure is ignored in AWS Query.
The wrapping element is always operation name + "Response".
" + }, + "NestedStructures": { + "name": "NestedStructures", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NestedStructuresInput" + }, + "documentation": "This test serializes nested and recursive structure members.
" + }, + "NoInputAndOutput": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request payload or response members.
While this should be rare, code generators must support this.
" + }, + "PutWithContentEncoding": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "QueryIdempotencyTokenAutoFill": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "QueryLists": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "QueryTimestamps": { + "name": "QueryTimestamps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryTimestampsInput" + }, + "documentation": "This test serializes timestamps.
Recursive shapes
" + }, + "SimpleInputParams": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "SimpleScalarXmlProperties": { + "name": "SimpleScalarXmlProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarXmlPropertiesOutput" + } + }, + "XmlBlobs": { + "name": "XmlBlobs", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlBlobsOutput" + }, + "documentation": "Blobs are base64 encoded
" + }, + "XmlEmptyBlobs": { + "name": "XmlEmptyBlobs", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlBlobsOutput" + } + }, + "XmlEmptyLists": { + "name": "XmlEmptyLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + } + }, + "XmlEnums": { + "name": "XmlEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlEnumsOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
" + }, + "XmlIntEnums": { + "name": "XmlIntEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlIntEnumsOutput" + }, + "documentation": "This example serializes intEnums as top level properties, in lists, sets, and maps.
" + }, + "XmlLists": { + "name": "XmlLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + } + }, + "shapes": { + "Blob": { + "type": "blob" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "ComplexError": { + "type": "structure", + "members": { + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "exception": true + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "DatetimeOffsetsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "Double": { + "type": "double", + "box": true + }, + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + }, + "EmptyInputAndEmptyOutputOutput": { + "type": "structure", + "members": {} + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "Float": { + "type": "float", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FractionalSecondsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "GreetingList": { + "type": "list", + "member": { + "shape": "GreetingStruct" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + }, + "GreetingWithErrorsOutput": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + } + } + }, + "HostLabelInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "IgnoresWrappingXmlNameOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + } + }, + "locationName": "IgnoreMe" + }, + "Integer": { + "type": "integer", + "box": true + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "InvalidGreeting": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "documentation": "This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithXmlName": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "Long": { + "type": "long", + "box": true + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "NestedStructWithList": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + } + } + }, + "NestedStructuresInput": { + "type": "structure", + "members": { + "Nested": { + "shape": "StructArg" + } + } + }, + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + }, + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String" + }, + "data": { + "shape": "String" + } + } + }, + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true + } + } + }, + "QueryListsInput": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + }, + "ComplexListArg": { + "shape": "GreetingList" + }, + "ListArgWithXmlNameMember": { + "shape": "ListWithXmlName" + }, + "ListArgWithXmlName": { + "shape": "ListWithXmlName", + "locationName": "Hi" + }, + "NestedWithList": { + "shape": "NestedStructWithList" + } + } + }, + "QueryTimestampsInput": { + "type": "structure", + "members": { + "normalFormat": { + "shape": "Timestamp" + }, + "epochMember": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochTarget": { + "shape": "EpochSeconds" + } + } + }, + "RecursiveXmlShapesOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveXmlShapesOutputNested1" + } + } + }, + "RecursiveXmlShapesOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveXmlShapesOutputNested2" + } + } + }, + "RecursiveXmlShapesOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveXmlShapesOutputNested1" + } + } + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "SimpleInputParamsInput": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + }, + "Bar": { + "shape": "String" + }, + "Baz": { + "shape": "Boolean" + }, + "Bam": { + "shape": "Integer" + }, + "FloatValue": { + "shape": "Float" + }, + "Boo": { + "shape": "Double" + }, + "Qux": { + "shape": "Blob" + }, + "FooEnum": { + "shape": "FooEnum" + }, + "HasQueryName": { + "shape": "String" + }, + "HasQueryAndXmlName": { + "shape": "String", + "locationName": "hasQueryAndXmlName" + }, + "UsesXmlName": { + "shape": "String", + "locationName": "usesXmlName" + } + } + }, + "SimpleScalarXmlPropertiesOutput": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "emptyStringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StructArg": { + "type": "structure", + "members": { + "StringArg": { + "shape": "String" + }, + "OtherArg": { + "shape": "Boolean" + }, + "RecursiveArg": { + "shape": "StructArg" + } + } + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "Timestamp": { + "type": "timestamp" + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "XmlBlobsOutput": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "XmlEnumsOutput": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "XmlIntEnumsOutput": { + "type": "structure", + "members": { + "intEnum1": { + "shape": "IntegerEnum" + }, + "intEnum2": { + "shape": "IntegerEnum" + }, + "intEnum3": { + "shape": "IntegerEnum" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "intEnumSet": { + "shape": "IntegerEnumSet" + }, + "intEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "XmlListsOutput": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "renamedListMembers": { + "shape": "RenamedListMembers", + "locationName": "renamed" + }, + "flattenedList": { + "shape": "RenamedListMembers", + "flattened": true + }, + "flattenedList2": { + "shape": "RenamedListMembers", + "flattened": true, + "locationName": "customName" + }, + "flattenedListWithMemberNamespace": { + "shape": "ListWithMemberNamespace", + "flattened": true + }, + "flattenedListWithNamespace": { + "shape": "ListWithNamespace", + "flattened": true + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + } + } + }, + "XmlNamespaceNested": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "xmlNamespace": { + "prefix": "baz", + "uri": "http://baz.com" + } + }, + "values": { + "shape": "XmlNamespacedList", + "xmlNamespace": "http://qux.com" + } + }, + "xmlNamespace": "http://foo.com" + }, + "XmlNamespacedList": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "http://bux.com" + } + }, + "XmlNamespacesOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "XmlNamespaceNested" + } + }, + "xmlNamespace": "http://foo.com" + }, + "XmlTimestampsOutput": { + "type": "structure", + "members": { + "normal": { + "shape": "Timestamp" + }, + "dateTime": { + "shape": "SyntheticTimestamp_date_time" + }, + "dateTimeOnTarget": { + "shape": "DateTime" + }, + "epochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochSecondsOnTarget": { + "shape": "EpochSeconds" + }, + "httpDate": { + "shape": "SyntheticTimestamp_http_date" + }, + "httpDateOnTarget": { + "shape": "HttpDate" + } + } + } + }, + "documentation": "An EC2 query service that sends query requests and XML responses.
" +} \ No newline at end of file diff --git a/tools/code-generation/protocol-tests/api-descriptions/json-protocol-2018-01-01.normal.json b/tools/code-generation/protocol-tests/api-descriptions/json-protocol-2018-01-01.normal.json new file mode 100644 index 00000000000..c1054b12c04 --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/json-protocol-2018-01-01.normal.json @@ -0,0 +1,560 @@ +{ + "version":"2.0", + "metadata":{ + "apiVersion":"2018-01-01", + "auth":["aws.auth#sigv4"], + "endpointPrefix":"jsonprotocol", + "jsonVersion":"1.1", + "protocol":"json", + "protocols":["json"], + "serviceFullName":"Sample Json 1.1 Protocol Service", + "serviceId":"Json Protocol", + "signatureVersion":"v4", + "signingName":"jsonprotocol", + "targetPrefix":"JsonProtocol", + "uid":"json-protocol-2018-01-01" + }, + "operations":{ + "ContentTypeParameters":{ + "name":"ContentTypeParameters", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ContentTypeParametersInput"}, + "output":{"shape":"ContentTypeParametersOutput"}, + "documentation":"The example tests how servers must support requests containing a Content-Type
header with parameters.
This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent":true + }, + "HostWithPathOperation":{ + "name":"HostWithPathOperation", + "http":{ + "method":"POST", + "requestUri":"/" + } + }, + "JsonEnums":{ + "name":"JsonEnums", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"JsonEnumsInputOutput"}, + "output":{"shape":"JsonEnumsInputOutput"}, + "documentation":"This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent":true + }, + "JsonIntEnums":{ + "name":"JsonIntEnums", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"JsonIntEnumsInputOutput"}, + "output":{"shape":"JsonIntEnumsInputOutput"}, + "documentation":"This example serializes intEnums as top level properties, in lists, sets, and maps.
", + "idempotent":true + }, + "JsonUnions":{ + "name":"JsonUnions", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"UnionInputOutput"}, + "output":{"shape":"UnionInputOutput"}, + "documentation":"This operation uses unions for inputs and outputs.
", + "idempotent":true + }, + "KitchenSinkOperation":{ + "name":"KitchenSinkOperation", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"KitchenSink"}, + "output":{"shape":"KitchenSink"}, + "errors":[ + {"shape":"ErrorWithMembers"}, + {"shape":"ErrorWithoutMembers"} + ] + }, + "NullOperation":{ + "name":"NullOperation", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"NullOperationInputOutput"}, + "output":{"shape":"NullOperationInputOutput"} + }, + "OperationWithOptionalInputOutput":{ + "name":"OperationWithOptionalInputOutput", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"OperationWithOptionalInputOutputInput"}, + "output":{"shape":"OperationWithOptionalInputOutputOutput"} + }, + "PutAndGetInlineDocuments":{ + "name":"PutAndGetInlineDocuments", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"PutAndGetInlineDocumentsInputOutput"}, + "output":{"shape":"PutAndGetInlineDocumentsInputOutput"}, + "documentation":"This example serializes an inline document as part of the payload.
" + }, + "PutWithContentEncoding":{ + "name":"PutWithContentEncoding", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"PutWithContentEncodingInput"}, + "requestcompression":{"encodings":["gzip"]} + }, + "SimpleScalarProperties":{ + "name":"SimpleScalarProperties", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"SimpleScalarPropertiesInputOutput"}, + "output":{"shape":"SimpleScalarPropertiesInputOutput"} + } + }, + "shapes":{ + "Blob":{"type":"blob"}, + "Boolean":{ + "type":"boolean", + "box":true + }, + "ComplexError":{ + "type":"structure", + "members":{ + "TopLevel":{"shape":"String"}, + "Nested":{"shape":"ComplexNestedErrorData"} + }, + "documentation":"This error is thrown when a request is invalid.
", + "exception":true + }, + "ComplexNestedErrorData":{ + "type":"structure", + "members":{ + "Foo":{"shape":"String"} + } + }, + "ContentTypeParametersInput":{ + "type":"structure", + "members":{ + "value":{"shape":"Integer"} + } + }, + "ContentTypeParametersOutput":{ + "type":"structure", + "members":{ + } + }, + "DateTime":{ + "type":"timestamp", + "timestampFormat":"iso8601" + }, + "DatetimeOffsetsOutput":{ + "type":"structure", + "members":{ + "datetime":{"shape":"DateTime"} + } + }, + "Document":{ + "type":"structure", + "members":{ + }, + "document":true + }, + "Double":{ + "type":"double", + "box":true + }, + "EmptyStruct":{ + "type":"structure", + "members":{ + } + }, + "ErrorWithMembers":{ + "type":"structure", + "members":{ + "Code":{"shape":"String"}, + "ComplexData":{"shape":"KitchenSink"}, + "IntegerField":{"shape":"Integer"}, + "ListField":{"shape":"ListOfStrings"}, + "MapField":{"shape":"MapOfStrings"}, + "Message":{"shape":"String"}, + "StringField":{ + "shape":"String", + "documentation":"abc
" + } + }, + "exception":true + }, + "ErrorWithoutMembers":{ + "type":"structure", + "members":{ + }, + "exception":true, + "fault":true + }, + "Float":{ + "type":"float", + "box":true + }, + "FooEnum":{ + "type":"string", + "enum":[ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList":{ + "type":"list", + "member":{"shape":"FooEnum"} + }, + "FooEnumMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"FooEnum"} + }, + "FooEnumSet":{ + "type":"list", + "member":{"shape":"FooEnum"} + }, + "FooError":{ + "type":"structure", + "members":{ + }, + "documentation":"This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.
", + "exception":true, + "fault":true + }, + "FractionalSecondsOutput":{ + "type":"structure", + "members":{ + "datetime":{"shape":"DateTime"} + } + }, + "GreetingStruct":{ + "type":"structure", + "members":{ + "hi":{"shape":"String"} + } + }, + "GreetingWithErrorsOutput":{ + "type":"structure", + "members":{ + "greeting":{"shape":"String"} + } + }, + "HostLabelInput":{ + "type":"structure", + "required":["label"], + "members":{ + "label":{ + "shape":"String", + "hostLabel":true + } + } + }, + "Integer":{ + "type":"integer", + "box":true + }, + "IntegerEnum":{ + "type":"integer", + "box":true + }, + "IntegerEnumList":{ + "type":"list", + "member":{"shape":"IntegerEnum"} + }, + "IntegerEnumMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"IntegerEnum"} + }, + "IntegerEnumSet":{ + "type":"list", + "member":{"shape":"IntegerEnum"} + }, + "InvalidGreeting":{ + "type":"structure", + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"This error is thrown when an invalid greeting value is provided.
", + "exception":true + }, + "JsonEnumsInputOutput":{ + "type":"structure", + "members":{ + "fooEnum1":{"shape":"FooEnum"}, + "fooEnum2":{"shape":"FooEnum"}, + "fooEnum3":{"shape":"FooEnum"}, + "fooEnumList":{"shape":"FooEnumList"}, + "fooEnumSet":{"shape":"FooEnumSet"}, + "fooEnumMap":{"shape":"FooEnumMap"} + } + }, + "JsonIntEnumsInputOutput":{ + "type":"structure", + "members":{ + "intEnum1":{"shape":"IntegerEnum"}, + "intEnum2":{"shape":"IntegerEnum"}, + "intEnum3":{"shape":"IntegerEnum"}, + "intEnumList":{"shape":"IntegerEnumList"}, + "intEnumSet":{"shape":"IntegerEnumSet"}, + "intEnumMap":{"shape":"IntegerEnumMap"} + } + }, + "JsonValue":{"type":"string"}, + "KitchenSink":{ + "type":"structure", + "members":{ + "Blob":{"shape":"Blob"}, + "Boolean":{"shape":"Boolean"}, + "Double":{"shape":"Double"}, + "EmptyStruct":{"shape":"EmptyStruct"}, + "Float":{"shape":"Float"}, + "HttpdateTimestamp":{"shape":"SyntheticTimestamp_http_date"}, + "Integer":{"shape":"Integer"}, + "Iso8601Timestamp":{"shape":"SyntheticTimestamp_date_time"}, + "JsonValue":{ + "shape":"JsonValue", + "jsonvalue":true + }, + "ListOfLists":{"shape":"ListOfListOfStrings"}, + "ListOfMapsOfStrings":{"shape":"ListOfMapsOfStrings"}, + "ListOfStrings":{"shape":"ListOfStrings"}, + "ListOfStructs":{"shape":"ListOfStructs"}, + "Long":{"shape":"Long"}, + "MapOfListsOfStrings":{"shape":"MapOfListsOfStrings"}, + "MapOfMaps":{"shape":"MapOfMapOfStrings"}, + "MapOfStrings":{"shape":"MapOfStrings"}, + "MapOfStructs":{"shape":"MapOfStructs"}, + "RecursiveList":{"shape":"ListOfKitchenSinks"}, + "RecursiveMap":{"shape":"MapOfKitchenSinks"}, + "RecursiveStruct":{"shape":"KitchenSink"}, + "SimpleStruct":{"shape":"SimpleStruct"}, + "String":{"shape":"String"}, + "StructWithJsonName":{"shape":"StructWithJsonName"}, + "Timestamp":{"shape":"Timestamp"}, + "UnixTimestamp":{"shape":"SyntheticTimestamp_epoch_seconds"} + } + }, + "ListOfKitchenSinks":{ + "type":"list", + "member":{"shape":"KitchenSink"} + }, + "ListOfListOfStrings":{ + "type":"list", + "member":{"shape":"ListOfStrings"} + }, + "ListOfMapsOfStrings":{ + "type":"list", + "member":{"shape":"MapOfStrings"} + }, + "ListOfStrings":{ + "type":"list", + "member":{"shape":"String"} + }, + "ListOfStructs":{ + "type":"list", + "member":{"shape":"SimpleStruct"} + }, + "Long":{ + "type":"long", + "box":true + }, + "MapOfKitchenSinks":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"KitchenSink"} + }, + "MapOfListsOfStrings":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"ListOfStrings"} + }, + "MapOfMapOfStrings":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"MapOfStrings"} + }, + "MapOfStrings":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "MapOfStructs":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"SimpleStruct"} + }, + "MyUnion":{ + "type":"structure", + "members":{ + "stringValue":{"shape":"String"}, + "booleanValue":{"shape":"Boolean"}, + "numberValue":{"shape":"Integer"}, + "blobValue":{"shape":"Blob"}, + "timestampValue":{"shape":"Timestamp"}, + "enumValue":{"shape":"FooEnum"}, + "listValue":{"shape":"StringList"}, + "mapValue":{"shape":"StringMap"}, + "structureValue":{"shape":"GreetingStruct"} + }, + "documentation":"A union with a representative set of types for members.
", + "union":true + }, + "NullOperationInputOutput":{ + "type":"structure", + "members":{ + "string":{"shape":"String"} + } + }, + "OperationWithOptionalInputOutputInput":{ + "type":"structure", + "members":{ + "Value":{"shape":"String"} + } + }, + "OperationWithOptionalInputOutputOutput":{ + "type":"structure", + "members":{ + "Value":{"shape":"String"} + } + }, + "PutAndGetInlineDocumentsInputOutput":{ + "type":"structure", + "members":{ + "inlineDocument":{"shape":"Document"} + } + }, + "PutWithContentEncodingInput":{ + "type":"structure", + "members":{ + "encoding":{"shape":"String"}, + "data":{"shape":"String"} + } + }, + "SimpleScalarPropertiesInputOutput":{ + "type":"structure", + "members":{ + "floatValue":{"shape":"Float"}, + "doubleValue":{"shape":"Double"} + } + }, + "SimpleStruct":{ + "type":"structure", + "members":{ + "Value":{"shape":"String"} + } + }, + "String":{"type":"string"}, + "StringList":{ + "type":"list", + "member":{"shape":"String"} + }, + "StringMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "StructWithJsonName":{ + "type":"structure", + "members":{ + "Value":{"shape":"String"} + } + }, + "SyntheticTimestamp_date_time":{ + "type":"timestamp", + "timestampFormat":"iso8601" + }, + "SyntheticTimestamp_epoch_seconds":{ + "type":"timestamp", + "timestampFormat":"unixTimestamp" + }, + "SyntheticTimestamp_http_date":{ + "type":"timestamp", + "timestampFormat":"rfc822" + }, + "Timestamp":{"type":"timestamp"}, + "UnionInputOutput":{ + "type":"structure", + "members":{ + "contents":{"shape":"MyUnion"} + }, + "documentation":"A shared structure that contains a single union member.
" + } + } +} diff --git a/tools/code-generation/protocol-tests/api-descriptions/json-rpc-10-2020-07-14.normal.json b/tools/code-generation/protocol-tests/api-descriptions/json-rpc-10-2020-07-14.normal.json new file mode 100644 index 00000000000..4f2edb69f57 --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/json-rpc-10-2020-07-14.normal.json @@ -0,0 +1,306 @@ +{ + "version":"2.0", + "metadata":{ + "apiVersion":"2020-07-14", + "auth":["aws.auth#sigv4"], + "endpointPrefix":"jsonrpc10", + "jsonVersion":"1.0", + "protocol":"json", + "protocols":["json"], + "serviceFullName":"Sample Json 1.0 Protocol Service", + "serviceId":"JSON RPC 10", + "signatureVersion":"v4", + "signingName":"jsonrpc10", + "targetPrefix":"JsonRpc10", + "uid":"json-rpc-10-2020-07-14" + }, + "operations":{ + "ContentTypeParameters":{ + "name":"ContentTypeParameters", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"ContentTypeParametersInput"}, + "output":{"shape":"ContentTypeParametersOutput"}, + "documentation":"The example tests how servers must support requests containing a Content-Type
header with parameters.
The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "EndpointOperation":{ + "name":"EndpointOperation", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "endpoint":{"hostPrefix":"foo."} + }, + "EndpointWithHostLabelOperation":{ + "name":"EndpointWithHostLabelOperation", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"EndpointWithHostLabelOperationInput"}, + "endpoint":{ + "hostPrefix":"foo.{label}." + } + }, + "GreetingWithErrors":{ + "name":"GreetingWithErrors", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"GreetingWithErrorsInput"}, + "output":{"shape":"GreetingWithErrorsOutput"}, + "errors":[ + {"shape":"InvalidGreeting"}, + {"shape":"FooError"}, + {"shape":"ComplexError"} + ], + "documentation":"This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent":true + }, + "HostWithPathOperation":{ + "name":"HostWithPathOperation", + "http":{ + "method":"POST", + "requestUri":"/" + } + }, + "JsonUnions":{ + "name":"JsonUnions", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"JsonUnionsInput"}, + "output":{"shape":"JsonUnionsOutput"}, + "documentation":"This operation uses unions for inputs and outputs.
", + "idempotent":true + }, + "NoInputAndNoOutput":{ + "name":"NoInputAndNoOutput", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "documentation":"The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "NoInputAndOutput":{ + "name":"NoInputAndOutput", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "output":{"shape":"NoInputAndOutputOutput"}, + "documentation":"The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "PutWithContentEncoding":{ + "name":"PutWithContentEncoding", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"PutWithContentEncodingInput"}, + "requestcompression":{"encodings":["gzip"]} + }, + "SimpleScalarProperties":{ + "name":"SimpleScalarProperties", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"SimpleScalarPropertiesInput"}, + "output":{"shape":"SimpleScalarPropertiesOutput"} + } + }, + "shapes":{ + "Blob":{"type":"blob"}, + "Boolean":{ + "type":"boolean", + "box":true + }, + "ComplexError":{ + "type":"structure", + "members":{ + "TopLevel":{"shape":"String"}, + "Nested":{"shape":"ComplexNestedErrorData"} + }, + "documentation":"This error is thrown when a request is invalid.
", + "exception":true + }, + "ComplexNestedErrorData":{ + "type":"structure", + "members":{ + "Foo":{"shape":"String"} + } + }, + "ContentTypeParametersInput":{ + "type":"structure", + "members":{ + "value":{"shape":"Integer"} + } + }, + "ContentTypeParametersOutput":{ + "type":"structure", + "members":{ + } + }, + "Double":{ + "type":"double", + "box":true + }, + "EmptyInputAndEmptyOutputInput":{ + "type":"structure", + "members":{ + } + }, + "EmptyInputAndEmptyOutputOutput":{ + "type":"structure", + "members":{ + } + }, + "EndpointWithHostLabelOperationInput":{ + "type":"structure", + "required":["label"], + "members":{ + "label":{ + "shape":"String", + "hostLabel":true + } + } + }, + "Float":{ + "type":"float", + "box":true + }, + "FooEnum":{ + "type":"string", + "enum":[ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooError":{ + "type":"structure", + "members":{ + }, + "documentation":"This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.
", + "exception":true, + "fault":true + }, + "GreetingStruct":{ + "type":"structure", + "members":{ + "hi":{"shape":"String"} + } + }, + "GreetingWithErrorsInput":{ + "type":"structure", + "members":{ + "greeting":{"shape":"String"} + } + }, + "GreetingWithErrorsOutput":{ + "type":"structure", + "members":{ + "greeting":{"shape":"String"} + } + }, + "Integer":{ + "type":"integer", + "box":true + }, + "IntegerEnum":{ + "type":"integer", + "box":true + }, + "InvalidGreeting":{ + "type":"structure", + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"This error is thrown when an invalid greeting value is provided.
", + "exception":true + }, + "JsonUnionsInput":{ + "type":"structure", + "members":{ + "contents":{"shape":"MyUnion"} + } + }, + "JsonUnionsOutput":{ + "type":"structure", + "members":{ + "contents":{"shape":"MyUnion"} + } + }, + "MyUnion":{ + "type":"structure", + "members":{ + "stringValue":{"shape":"String"}, + "booleanValue":{"shape":"Boolean"}, + "numberValue":{"shape":"Integer"}, + "blobValue":{"shape":"Blob"}, + "timestampValue":{"shape":"Timestamp"}, + "enumValue":{"shape":"FooEnum"}, + "intEnumValue":{"shape":"IntegerEnum"}, + "listValue":{"shape":"StringList"}, + "mapValue":{"shape":"StringMap"}, + "structureValue":{"shape":"GreetingStruct"} + }, + "documentation":"A union with a representative set of types for members.
", + "union":true + }, + "NoInputAndOutputOutput":{ + "type":"structure", + "members":{ + } + }, + "PutWithContentEncodingInput":{ + "type":"structure", + "members":{ + "encoding":{"shape":"String"}, + "data":{"shape":"String"} + } + }, + "SimpleScalarPropertiesInput":{ + "type":"structure", + "members":{ + "floatValue":{"shape":"Float"}, + "doubleValue":{"shape":"Double"} + } + }, + "SimpleScalarPropertiesOutput":{ + "type":"structure", + "members":{ + "floatValue":{"shape":"Float"}, + "doubleValue":{"shape":"Double"} + } + }, + "String":{"type":"string"}, + "StringList":{ + "type":"list", + "member":{"shape":"String"} + }, + "StringMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "Timestamp":{"type":"timestamp"} + } +} diff --git a/tools/code-generation/protocol-tests/api-descriptions/query-protocol-2020-01-08.normal.json b/tools/code-generation/protocol-tests/api-descriptions/query-protocol-2020-01-08.normal.json new file mode 100644 index 00000000000..cd63cbd4624 --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/query-protocol-2020-01-08.normal.json @@ -0,0 +1,1233 @@ +{ + "version": "2.0", + "metadata": { + "apiVersion": "2020-01-08", + "auth": [ + "aws.auth#sigv4" + ], + "endpointPrefix": "awsquery", + "protocol": "query", + "protocols": [ + "query" + ], + "serviceFullName": "Sample Query Protocol Service", + "serviceId": "Query Protocol", + "signatureVersion": "v4", + "signingName": "awsquery", + "uid": "query-protocol-2020-01-08" + }, + "operations": { + "DatetimeOffsets": { + "name": "DatetimeOffsets", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "DatetimeOffsetsOutput" + } + }, + "EmptyInputAndEmptyOutput": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "EmptyInputAndEmptyOutputInput" + }, + "output": { + "shape": "EmptyInputAndEmptyOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response members.
While this should be rare, code generators must support this.
" + }, + "EndpointOperation": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "EndpointWithHostLabelOperation": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "HostLabelInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "FlattenedXmlMap": { + "name": "FlattenedXmlMap", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "FlattenedXmlMapOutput" + }, + "documentation": "Flattened maps
" + }, + "FlattenedXmlMapWithXmlName": { + "name": "FlattenedXmlMapWithXmlName", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "FlattenedXmlMapWithXmlNameOutput" + }, + "documentation": "Flattened maps with @xmlName
" + }, + "FlattenedXmlMapWithXmlNamespace": { + "name": "FlattenedXmlMapWithXmlNamespace", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "FlattenedXmlMapWithXmlNamespaceOutput" + }, + "documentation": "Flattened maps with @xmlNamespace and @xmlName
" + }, + "FractionalSeconds": { + "name": "FractionalSeconds", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "FractionalSecondsOutput" + } + }, + "GreetingWithErrors": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "GreetingWithErrorsOutput" + }, + "errors": [ + { + "shape": "InvalidGreeting" + }, + { + "shape": "CustomCodeError" + }, + { + "shape": "ComplexError" + } + ], + "documentation": "This operation has three possible return values:
The xmlName trait on the output structure is ignored in AWS Query.
The wrapping element is always operation name + "Response", and inside of that wrapper is another wrapper named operation name + "Result".
" + }, + "NestedStructures": { + "name": "NestedStructures", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NestedStructuresInput" + }, + "documentation": "This test serializes nested and recursive structure members.
" + }, + "NoInputAndNoOutput": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output.
While this should be rare, code generators must support this.
" + }, + "NoInputAndOutput": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NoInputAndOutputInput" + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request payload or response members.
While this should be rare, code generators must support this.
" + }, + "PutWithContentEncoding": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "QueryIdempotencyTokenAutoFill": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "QueryLists": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "QueryMaps": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "QueryTimestamps": { + "name": "QueryTimestamps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryTimestampsInput" + }, + "documentation": "This test serializes timestamps.
Recursive shapes
" + }, + "SimpleInputParams": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "SimpleScalarXmlProperties": { + "name": "SimpleScalarXmlProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarXmlPropertiesOutput" + } + }, + "XmlBlobs": { + "name": "XmlBlobs", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlBlobsOutput" + }, + "documentation": "Blobs are base64 encoded
" + }, + "XmlEmptyBlobs": { + "name": "XmlEmptyBlobs", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlBlobsOutput" + } + }, + "XmlEmptyLists": { + "name": "XmlEmptyLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + } + }, + "XmlEmptyMaps": { + "name": "XmlEmptyMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlMapsOutput" + } + }, + "XmlEnums": { + "name": "XmlEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlEnumsOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
" + }, + "XmlIntEnums": { + "name": "XmlIntEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlIntEnumsOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
" + }, + "XmlLists": { + "name": "XmlLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "XmlMapsXmlName": { + "name": "XmlMapsXmlName", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlMapsXmlNameOutput" + } + }, + "XmlNamespaces": { + "name": "XmlNamespaces", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlNamespacesOutput" + } + }, + "XmlTimestamps": { + "name": "XmlTimestamps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlTimestampsOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + } + }, + "shapes": { + "Blob": { + "type": "blob" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "ComplexError": { + "type": "structure", + "members": { + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "exception": true + }, + "ComplexMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "GreetingStruct" + } + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + }, + "CustomCodeError": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "error": { + "code": "Customized", + "httpStatusCode": 402, + "senderFault": true + }, + "exception": true + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "DatetimeOffsetsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "Double": { + "type": "double", + "box": true + }, + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + }, + "EmptyInputAndEmptyOutputOutput": { + "type": "structure", + "members": {} + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "FlattenedXmlMapOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "FooEnumMap", + "flattened": true + } + } + }, + "FlattenedXmlMapWithXmlNameOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "FlattenedXmlMapWithXmlNameOutputMap", + "flattened": true, + "locationName": "KVP" + } + } + }, + "FlattenedXmlMapWithXmlNameOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K" + }, + "value": { + "shape": "String", + "locationName": "V" + } + }, + "FlattenedXmlMapWithXmlNamespaceOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "FlattenedXmlMapWithXmlNamespaceOutputMap", + "flattened": true, + "locationName": "KVP", + "xmlNamespace": "https://the-member.example.com" + } + } + }, + "FlattenedXmlMapWithXmlNamespaceOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K", + "xmlNamespace": "https://the-key.example.com" + }, + "value": { + "shape": "String", + "locationName": "V", + "xmlNamespace": "https://the-value.example.com" + } + }, + "Float": { + "type": "float", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FractionalSecondsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "GreetingList": { + "type": "list", + "member": { + "shape": "GreetingStruct" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + }, + "GreetingWithErrorsOutput": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + } + } + }, + "HostLabelInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "IgnoresWrappingXmlNameOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + } + }, + "locationName": "IgnoreMe" + }, + "Integer": { + "type": "integer", + "box": true + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "InvalidGreeting": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "documentation": "This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithXmlName": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "Long": { + "type": "long", + "box": true + }, + "MapOfLists": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringList" + } + }, + "MapWithXmlName": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K" + }, + "value": { + "shape": "String", + "locationName": "V" + } + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "NestedStructWithList": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + } + } + }, + "NestedStructWithMap": { + "type": "structure", + "members": { + "MapArg": { + "shape": "StringMap" + } + } + }, + "NestedStructuresInput": { + "type": "structure", + "members": { + "Nested": { + "shape": "StructArg" + } + } + }, + "NoInputAndOutputInput": { + "type": "structure", + "members": {} + }, + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + }, + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String" + }, + "data": { + "shape": "String" + } + } + }, + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true + } + } + }, + "QueryListsInput": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + }, + "ComplexListArg": { + "shape": "GreetingList" + }, + "FlattenedListArg": { + "shape": "StringList", + "flattened": true + }, + "ListArgWithXmlNameMember": { + "shape": "ListWithXmlName" + }, + "FlattenedListArgWithXmlName": { + "shape": "ListWithXmlName", + "flattened": true, + "locationName": "Hi" + }, + "NestedWithList": { + "shape": "NestedStructWithList" + } + } + }, + "QueryMapsInput": { + "type": "structure", + "members": { + "MapArg": { + "shape": "StringMap" + }, + "RenamedMapArg": { + "shape": "StringMap", + "locationName": "Foo" + }, + "ComplexMapArg": { + "shape": "ComplexMap" + }, + "MapWithXmlMemberName": { + "shape": "MapWithXmlName" + }, + "FlattenedMap": { + "shape": "StringMap", + "flattened": true + }, + "FlattenedMapWithXmlName": { + "shape": "MapWithXmlName", + "flattened": true, + "locationName": "Hi" + }, + "MapOfLists": { + "shape": "MapOfLists" + }, + "NestedStructWithMap": { + "shape": "NestedStructWithMap" + } + } + }, + "QueryTimestampsInput": { + "type": "structure", + "members": { + "normalFormat": { + "shape": "Timestamp" + }, + "epochMember": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochTarget": { + "shape": "EpochSeconds" + } + } + }, + "RecursiveXmlShapesOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveXmlShapesOutputNested1" + } + } + }, + "RecursiveXmlShapesOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveXmlShapesOutputNested2" + } + } + }, + "RecursiveXmlShapesOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveXmlShapesOutputNested1" + } + } + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "SimpleInputParamsInput": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + }, + "Bar": { + "shape": "String" + }, + "Baz": { + "shape": "Boolean" + }, + "Bam": { + "shape": "Integer" + }, + "FloatValue": { + "shape": "Float" + }, + "Boo": { + "shape": "Double" + }, + "Qux": { + "shape": "Blob" + }, + "FooEnum": { + "shape": "FooEnum" + }, + "IntegerEnum": { + "shape": "IntegerEnum" + } + } + }, + "SimpleScalarXmlPropertiesOutput": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "emptyStringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StructArg": { + "type": "structure", + "members": { + "StringArg": { + "shape": "String" + }, + "OtherArg": { + "shape": "Boolean" + }, + "RecursiveArg": { + "shape": "StructArg" + } + } + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "Timestamp": { + "type": "timestamp" + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "XmlBlobsOutput": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "XmlEnumsOutput": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "XmlIntEnumsOutput": { + "type": "structure", + "members": { + "intEnum1": { + "shape": "IntegerEnum" + }, + "intEnum2": { + "shape": "IntegerEnum" + }, + "intEnum3": { + "shape": "IntegerEnum" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "intEnumSet": { + "shape": "IntegerEnumSet" + }, + "intEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "XmlListsOutput": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "renamedListMembers": { + "shape": "RenamedListMembers", + "locationName": "renamed" + }, + "flattenedList": { + "shape": "RenamedListMembers", + "flattened": true + }, + "flattenedList2": { + "shape": "RenamedListMembers", + "flattened": true, + "locationName": "customName" + }, + "flattenedListWithMemberNamespace": { + "shape": "ListWithMemberNamespace", + "flattened": true + }, + "flattenedListWithNamespace": { + "shape": "ListWithNamespace", + "flattened": true + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + } + } + }, + "XmlMapsOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsOutputMap" + } + } + }, + "XmlMapsOutputMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "GreetingStruct" + } + }, + "XmlMapsXmlNameOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsXmlNameOutputMap" + } + } + }, + "XmlMapsXmlNameOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "Attribute" + }, + "value": { + "shape": "GreetingStruct", + "locationName": "Setting" + } + }, + "XmlNamespaceNested": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "xmlNamespace": { + "prefix": "baz", + "uri": "http://baz.com" + } + }, + "values": { + "shape": "XmlNamespacedList", + "xmlNamespace": "http://qux.com" + } + }, + "xmlNamespace": "http://boo.com" + }, + "XmlNamespacedList": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "http://bux.com" + } + }, + "XmlNamespacesOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "XmlNamespaceNested" + } + }, + "xmlNamespace": "http://foo.com" + }, + "XmlTimestampsOutput": { + "type": "structure", + "members": { + "normal": { + "shape": "Timestamp" + }, + "dateTime": { + "shape": "SyntheticTimestamp_date_time" + }, + "dateTimeOnTarget": { + "shape": "DateTime" + }, + "epochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochSecondsOnTarget": { + "shape": "EpochSeconds" + }, + "httpDate": { + "shape": "SyntheticTimestamp_http_date" + }, + "httpDateOnTarget": { + "shape": "HttpDate" + } + } + } + }, + "documentation": "A query service that sends query requests and XML responses.
" +} \ No newline at end of file diff --git a/tools/code-generation/protocol-tests/api-descriptions/rest-json-protocol-2019-12-16.normal.json b/tools/code-generation/protocol-tests/api-descriptions/rest-json-protocol-2019-12-16.normal.json new file mode 100644 index 00000000000..1b52f0baf5e --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/rest-json-protocol-2019-12-16.normal.json @@ -0,0 +1,1935 @@ +{ + "version":"2.0", + "metadata":{ + "apiVersion":"2019-12-16", + "auth":["aws.auth#sigv4"], + "endpointPrefix":"restjson", + "protocol":"rest-json", + "protocols":["rest-json"], + "serviceFullName":"Sample Rest Json Protocol Service", + "serviceId":"Rest Json Protocol", + "signatureVersion":"v4", + "signingName":"restjson", + "uid":"rest-json-protocol-2019-12-16" + }, + "operations":{ + "AllQueryStringTypes":{ + "name":"AllQueryStringTypes", + "http":{ + "method":"GET", + "requestUri":"/AllQueryStringTypesInput", + "responseCode":200 + }, + "input":{"shape":"AllQueryStringTypesInput"}, + "documentation":"This example uses all query string types.
" + }, + "ConstantAndVariableQueryString":{ + "name":"ConstantAndVariableQueryString", + "http":{ + "method":"GET", + "requestUri":"/ConstantAndVariableQueryString?foo=bar", + "responseCode":200 + }, + "input":{"shape":"ConstantAndVariableQueryStringInput"}, + "documentation":"This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).
" + }, + "ConstantQueryString":{ + "name":"ConstantQueryString", + "http":{ + "method":"GET", + "requestUri":"/ConstantQueryString/{hello}?foo=bar&hello", + "responseCode":200 + }, + "input":{"shape":"ConstantQueryStringInput"}, + "documentation":"This example uses a constant query string parameters and a label. This simply tests that labels and query string parameters are compatible. The fixed query string parameter named "hello" should in no way conflict with the label, {hello}
.
The example tests how servers must support requests containing a Content-Type
header with parameters.
This example serializes a document as part of the payload.
", + "idempotent":true + }, + "DocumentTypeAsMapValue":{ + "name":"DocumentTypeAsMapValue", + "http":{ + "method":"PUT", + "requestUri":"/DocumentTypeAsMapValue", + "responseCode":200 + }, + "input":{"shape":"DocumentTypeAsMapValueInputOutput"}, + "output":{"shape":"DocumentTypeAsMapValueInputOutput"}, + "documentation":"This example serializes documents as the value of maps.
", + "idempotent":true + }, + "DocumentTypeAsPayload":{ + "name":"DocumentTypeAsPayload", + "http":{ + "method":"PUT", + "requestUri":"/DocumentTypeAsPayload", + "responseCode":200 + }, + "input":{"shape":"DocumentTypeAsPayloadInputOutput"}, + "output":{"shape":"DocumentTypeAsPayloadInputOutput"}, + "documentation":"This example serializes a document as the entire HTTP payload.
", + "idempotent":true + }, + "EmptyInputAndEmptyOutput":{ + "name":"EmptyInputAndEmptyOutput", + "http":{ + "method":"POST", + "requestUri":"/EmptyInputAndEmptyOutput", + "responseCode":200 + }, + "input":{"shape":"EmptyInputAndEmptyOutputInput"}, + "output":{"shape":"EmptyInputAndEmptyOutputOutput"}, + "documentation":"The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "EndpointOperation":{ + "name":"EndpointOperation", + "http":{ + "method":"POST", + "requestUri":"/EndpointOperation", + "responseCode":200 + }, + "endpoint":{"hostPrefix":"foo."} + }, + "EndpointWithHostLabelOperation":{ + "name":"EndpointWithHostLabelOperation", + "http":{ + "method":"POST", + "requestUri":"/EndpointWithHostLabelOperation", + "responseCode":200 + }, + "input":{"shape":"HostLabelInput"}, + "endpoint":{ + "hostPrefix":"foo.{label}." + } + }, + "FractionalSeconds":{ + "name":"FractionalSeconds", + "http":{ + "method":"POST", + "requestUri":"/FractionalSeconds", + "responseCode":200 + }, + "output":{"shape":"FractionalSecondsOutput"} + }, + "GreetingWithErrors":{ + "name":"GreetingWithErrors", + "http":{ + "method":"PUT", + "requestUri":"/GreetingWithErrors", + "responseCode":200 + }, + "output":{"shape":"GreetingWithErrorsOutput"}, + "errors":[ + {"shape":"InvalidGreeting"}, + {"shape":"ComplexError"}, + {"shape":"FooError"} + ], + "documentation":"This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent":true + }, + "HostWithPathOperation":{ + "name":"HostWithPathOperation", + "http":{ + "method":"GET", + "requestUri":"/HostWithPathOperation", + "responseCode":200 + } + }, + "HttpChecksumRequired":{ + "name":"HttpChecksumRequired", + "http":{ + "method":"POST", + "requestUri":"/HttpChecksumRequired", + "responseCode":200 + }, + "input":{"shape":"HttpChecksumRequiredInputOutput"}, + "output":{"shape":"HttpChecksumRequiredInputOutput"}, + "documentation":"This example tests httpChecksumRequired trait
", + "httpChecksumRequired":true + }, + "HttpEnumPayload":{ + "name":"HttpEnumPayload", + "http":{ + "method":"POST", + "requestUri":"/EnumPayload", + "responseCode":200 + }, + "input":{"shape":"EnumPayloadInput"}, + "output":{"shape":"EnumPayloadInput"} + }, + "HttpPayloadTraits":{ + "name":"HttpPayloadTraits", + "http":{ + "method":"POST", + "requestUri":"/HttpPayloadTraits", + "responseCode":200 + }, + "input":{"shape":"HttpPayloadTraitsInputOutput"}, + "output":{"shape":"HttpPayloadTraitsInputOutput"}, + "documentation":"This example serializes a blob shape in the payload.
In this example, no JSON document is synthesized because the payload is not a structure or a union type.
" + }, + "HttpPayloadWithStructure":{ + "name":"HttpPayloadWithStructure", + "http":{ + "method":"PUT", + "requestUri":"/HttpPayloadWithStructure", + "responseCode":200 + }, + "input":{"shape":"HttpPayloadWithStructureInputOutput"}, + "output":{"shape":"HttpPayloadWithStructureInputOutput"}, + "documentation":"This example serializes a structure in the payload.
Note that serializing a structure changes the wrapper element name to match the targeted structure.
", + "idempotent":true + }, + "HttpPayloadWithUnion":{ + "name":"HttpPayloadWithUnion", + "http":{ + "method":"PUT", + "requestUri":"/HttpPayloadWithUnion", + "responseCode":200 + }, + "input":{"shape":"HttpPayloadWithUnionInputOutput"}, + "output":{"shape":"HttpPayloadWithUnionInputOutput"}, + "documentation":"This example serializes a union in the payload.
", + "idempotent":true + }, + "HttpPrefixHeaders":{ + "name":"HttpPrefixHeaders", + "http":{ + "method":"GET", + "requestUri":"/HttpPrefixHeaders", + "responseCode":200 + }, + "input":{"shape":"HttpPrefixHeadersInput"}, + "output":{"shape":"HttpPrefixHeadersOutput"}, + "documentation":"This examples adds headers to the input of a request and response by prefix.
" + }, + "HttpPrefixHeadersInResponse":{ + "name":"HttpPrefixHeadersInResponse", + "http":{ + "method":"GET", + "requestUri":"/HttpPrefixHeadersResponse", + "responseCode":200 + }, + "input":{"shape":"HttpPrefixHeadersInResponseInput"}, + "output":{"shape":"HttpPrefixHeadersInResponseOutput"}, + "documentation":"Clients that perform this test extract all headers from the response.
" + }, + "HttpRequestWithFloatLabels":{ + "name":"HttpRequestWithFloatLabels", + "http":{ + "method":"GET", + "requestUri":"/FloatHttpLabels/{float}/{double}", + "responseCode":200 + }, + "input":{"shape":"HttpRequestWithFloatLabelsInput"} + }, + "HttpRequestWithGreedyLabelInPath":{ + "name":"HttpRequestWithGreedyLabelInPath", + "http":{ + "method":"GET", + "requestUri":"/HttpRequestWithGreedyLabelInPath/foo/{foo}/baz/{baz+}", + "responseCode":200 + }, + "input":{"shape":"HttpRequestWithGreedyLabelInPathInput"} + }, + "HttpRequestWithLabels":{ + "name":"HttpRequestWithLabels", + "http":{ + "method":"GET", + "requestUri":"/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}", + "responseCode":200 + }, + "input":{"shape":"HttpRequestWithLabelsInput"}, + "documentation":"The example tests how requests are serialized when there's no input payload but there are HTTP labels.
" + }, + "HttpRequestWithLabelsAndTimestampFormat":{ + "name":"HttpRequestWithLabelsAndTimestampFormat", + "http":{ + "method":"GET", + "requestUri":"/HttpRequestWithLabelsAndTimestampFormat/{memberEpochSeconds}/{memberHttpDate}/{memberDateTime}/{defaultFormat}/{targetEpochSeconds}/{targetHttpDate}/{targetDateTime}", + "responseCode":200 + }, + "input":{"shape":"HttpRequestWithLabelsAndTimestampFormatInput"}, + "documentation":"The example tests how requests serialize different timestamp formats in the URI path.
" + }, + "HttpRequestWithRegexLiteral":{ + "name":"HttpRequestWithRegexLiteral", + "http":{ + "method":"GET", + "requestUri":"/ReDosLiteral/{str}/(a+)+", + "responseCode":200 + }, + "input":{"shape":"HttpRequestWithRegexLiteralInput"} + }, + "HttpResponseCode":{ + "name":"HttpResponseCode", + "http":{ + "method":"PUT", + "requestUri":"/HttpResponseCode", + "responseCode":200 + }, + "output":{"shape":"HttpResponseCodeOutput"}, + "idempotent":true + }, + "HttpStringPayload":{ + "name":"HttpStringPayload", + "http":{ + "method":"POST", + "requestUri":"/StringPayload", + "responseCode":200 + }, + "input":{"shape":"StringPayloadInput"}, + "output":{"shape":"StringPayloadInput"} + }, + "IgnoreQueryParamsInResponse":{ + "name":"IgnoreQueryParamsInResponse", + "http":{ + "method":"GET", + "requestUri":"/IgnoreQueryParamsInResponse", + "responseCode":200 + }, + "output":{"shape":"IgnoreQueryParamsInResponseOutput"}, + "documentation":"This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.
" + }, + "InputAndOutputWithHeaders":{ + "name":"InputAndOutputWithHeaders", + "http":{ + "method":"POST", + "requestUri":"/InputAndOutputWithHeaders", + "responseCode":200 + }, + "input":{"shape":"InputAndOutputWithHeadersIO"}, + "output":{"shape":"InputAndOutputWithHeadersIO"}, + "documentation":"The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "JsonBlobs":{ + "name":"JsonBlobs", + "http":{ + "method":"POST", + "requestUri":"/JsonBlobs", + "responseCode":200 + }, + "input":{"shape":"JsonBlobsInputOutput"}, + "output":{"shape":"JsonBlobsInputOutput"}, + "documentation":"Blobs are base64 encoded
" + }, + "JsonEnums":{ + "name":"JsonEnums", + "http":{ + "method":"PUT", + "requestUri":"/JsonEnums", + "responseCode":200 + }, + "input":{"shape":"JsonEnumsInputOutput"}, + "output":{"shape":"JsonEnumsInputOutput"}, + "documentation":"This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent":true + }, + "JsonIntEnums":{ + "name":"JsonIntEnums", + "http":{ + "method":"PUT", + "requestUri":"/JsonIntEnums", + "responseCode":200 + }, + "input":{"shape":"JsonIntEnumsInputOutput"}, + "output":{"shape":"JsonIntEnumsInputOutput"}, + "documentation":"This example serializes intEnums as top level properties, in lists, sets, and maps.
", + "idempotent":true + }, + "JsonLists":{ + "name":"JsonLists", + "http":{ + "method":"PUT", + "requestUri":"/JsonLists", + "responseCode":200 + }, + "input":{"shape":"JsonListsInputOutput"}, + "output":{"shape":"JsonListsInputOutput"}, + "documentation":"This test case serializes JSON lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "JsonTimestamps":{ + "name":"JsonTimestamps", + "http":{ + "method":"POST", + "requestUri":"/JsonTimestamps", + "responseCode":200 + }, + "input":{"shape":"JsonTimestampsInputOutput"}, + "output":{"shape":"JsonTimestampsInputOutput"}, + "documentation":"This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "JsonUnions":{ + "name":"JsonUnions", + "http":{ + "method":"PUT", + "requestUri":"/JsonUnions", + "responseCode":200 + }, + "input":{"shape":"UnionInputOutput"}, + "output":{"shape":"UnionInputOutput"}, + "documentation":"This operation uses unions for inputs and outputs.
", + "idempotent":true + }, + "MediaTypeHeader":{ + "name":"MediaTypeHeader", + "http":{ + "method":"GET", + "requestUri":"/MediaTypeHeader", + "responseCode":200 + }, + "input":{"shape":"MediaTypeHeaderInput"}, + "output":{"shape":"MediaTypeHeaderOutput"}, + "documentation":"This example ensures that mediaType strings are base64 encoded in headers.
" + }, + "NoInputAndNoOutput":{ + "name":"NoInputAndNoOutput", + "http":{ + "method":"POST", + "requestUri":"/NoInputAndNoOutput", + "responseCode":200 + }, + "documentation":"The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "NoInputAndOutput":{ + "name":"NoInputAndOutput", + "http":{ + "method":"POST", + "requestUri":"/NoInputAndOutputOutput", + "responseCode":200 + }, + "output":{"shape":"NoInputAndOutputOutput"}, + "documentation":"The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "NullAndEmptyHeadersClient":{ + "name":"NullAndEmptyHeadersClient", + "http":{ + "method":"GET", + "requestUri":"/NullAndEmptyHeadersClient", + "responseCode":200 + }, + "input":{"shape":"NullAndEmptyHeadersIO"}, + "output":{"shape":"NullAndEmptyHeadersIO"}, + "documentation":"Null headers are not sent over the wire, empty headers are serialized to ""
" + }, + "NullAndEmptyHeadersServer":{ + "name":"NullAndEmptyHeadersServer", + "http":{ + "method":"GET", + "requestUri":"/NullAndEmptyHeadersServer", + "responseCode":200 + }, + "input":{"shape":"NullAndEmptyHeadersIO"}, + "output":{"shape":"NullAndEmptyHeadersIO"}, + "documentation":"Null headers are not sent over the wire, empty headers are serialized to ""
" + }, + "OmitsNullSerializesEmptyString":{ + "name":"OmitsNullSerializesEmptyString", + "http":{ + "method":"GET", + "requestUri":"/OmitsNullSerializesEmptyString", + "responseCode":200 + }, + "input":{"shape":"OmitsNullSerializesEmptyStringInput"}, + "documentation":"Omits null, but serializes empty string value.
" + }, + "OmitsSerializingEmptyLists":{ + "name":"OmitsSerializingEmptyLists", + "http":{ + "method":"POST", + "requestUri":"/OmitsSerializingEmptyLists", + "responseCode":200 + }, + "input":{"shape":"OmitsSerializingEmptyListsInput"}, + "documentation":"Omits serializing empty lists. Because empty strings are serilized as Foo=
, empty lists cannot also be serialized as Foo=
and instead must be omitted.
This operation defines a union that uses jsonName on some members.
" + }, + "PutWithContentEncoding":{ + "name":"PutWithContentEncoding", + "http":{ + "method":"POST", + "requestUri":"/requestcompression/putcontentwithencoding", + "responseCode":200 + }, + "input":{"shape":"PutWithContentEncodingInput"}, + "requestcompression":{"encodings":["gzip"]} + }, + "QueryIdempotencyTokenAutoFill":{ + "name":"QueryIdempotencyTokenAutoFill", + "http":{ + "method":"POST", + "requestUri":"/QueryIdempotencyTokenAutoFill", + "responseCode":200 + }, + "input":{"shape":"QueryIdempotencyTokenAutoFillInput"}, + "documentation":"Automatically adds idempotency tokens.
" + }, + "QueryParamsAsStringListMap":{ + "name":"QueryParamsAsStringListMap", + "http":{ + "method":"POST", + "requestUri":"/StringListMap", + "responseCode":200 + }, + "input":{"shape":"QueryParamsAsStringListMapInput"} + }, + "QueryPrecedence":{ + "name":"QueryPrecedence", + "http":{ + "method":"POST", + "requestUri":"/Precedence", + "responseCode":200 + }, + "input":{"shape":"QueryPrecedenceInput"} + }, + "RecursiveShapes":{ + "name":"RecursiveShapes", + "http":{ + "method":"PUT", + "requestUri":"/RecursiveShapes", + "responseCode":200 + }, + "input":{"shape":"RecursiveShapesInputOutput"}, + "output":{"shape":"RecursiveShapesInputOutput"}, + "documentation":"Recursive shapes
", + "idempotent":true + }, + "ResponseCodeHttpFallback":{ + "name":"ResponseCodeHttpFallback", + "http":{ + "method":"GET", + "requestUri":"/responseCodeHttpFallback", + "responseCode":201 + }, + "input":{"shape":"ResponseCodeHttpFallbackInputOutput"}, + "output":{"shape":"ResponseCodeHttpFallbackInputOutput"} + }, + "ResponseCodeRequired":{ + "name":"ResponseCodeRequired", + "http":{ + "method":"GET", + "requestUri":"/responseCodeRequired", + "responseCode":200 + }, + "output":{"shape":"ResponseCodeRequiredOutput"} + }, + "SimpleScalarProperties":{ + "name":"SimpleScalarProperties", + "http":{ + "method":"PUT", + "requestUri":"/SimpleScalarProperties", + "responseCode":200 + }, + "input":{"shape":"SimpleScalarPropertiesInputOutput"}, + "output":{"shape":"SimpleScalarPropertiesInputOutput"}, + "idempotent":true + }, + "TestBodyStructure":{ + "name":"TestBodyStructure", + "http":{ + "method":"POST", + "requestUri":"/body", + "responseCode":200 + }, + "input":{"shape":"TestBodyStructureInputOutput"}, + "output":{"shape":"TestBodyStructureInputOutput"}, + "documentation":"This example operation serializes a structure in the HTTP body.
It should ensure Content-Type: application/json is used in all requests and that an "empty" body is an empty JSON document ({}).
", + "idempotent":true + }, + "TestGetNoInputNoPayload":{ + "name":"TestGetNoInputNoPayload", + "http":{ + "method":"GET", + "requestUri":"/no_input_no_payload", + "responseCode":200 + }, + "output":{"shape":"TestNoPayloadInputOutput"}, + "documentation":"This example GET operation has no input and serializes a request without a HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.
" + }, + "TestGetNoPayload":{ + "name":"TestGetNoPayload", + "http":{ + "method":"GET", + "requestUri":"/no_payload", + "responseCode":200 + }, + "input":{"shape":"TestNoPayloadInputOutput"}, + "output":{"shape":"TestNoPayloadInputOutput"}, + "documentation":"This example GET operation serializes a request without a modeled HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.
" + }, + "TestPayloadBlob":{ + "name":"TestPayloadBlob", + "http":{ + "method":"POST", + "requestUri":"/blob_payload", + "responseCode":200 + }, + "input":{"shape":"TestPayloadBlobInputOutput"}, + "output":{"shape":"TestPayloadBlobInputOutput"}, + "documentation":"This example operation serializes a payload targeting a blob.
The Blob shape is not structured content and we cannot make assumptions about what data will be sent. This test ensures only a generic "Content-Type: application/octet-stream" header is used, and that we are not treating an empty body as an empty JSON document.
", + "idempotent":true + }, + "TestPayloadStructure":{ + "name":"TestPayloadStructure", + "http":{ + "method":"POST", + "requestUri":"/payload", + "responseCode":200 + }, + "input":{"shape":"TestPayloadStructureInputOutput"}, + "output":{"shape":"TestPayloadStructureInputOutput"}, + "documentation":"This example operation serializes a payload targeting a structure.
This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.
", + "idempotent":true + }, + "TestPostNoInputNoPayload":{ + "name":"TestPostNoInputNoPayload", + "http":{ + "method":"POST", + "requestUri":"/no_input_no_payload", + "responseCode":200 + }, + "output":{"shape":"TestNoPayloadInputOutput"}, + "documentation":"This example POST operation has no input and serializes a request without a HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled input.
" + }, + "TestPostNoPayload":{ + "name":"TestPostNoPayload", + "http":{ + "method":"POST", + "requestUri":"/no_payload", + "responseCode":200 + }, + "input":{"shape":"TestNoPayloadInputOutput"}, + "output":{"shape":"TestNoPayloadInputOutput"}, + "documentation":"This example POST operation serializes a request without a modeled HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled payload.
" + }, + "TimestampFormatHeaders":{ + "name":"TimestampFormatHeaders", + "http":{ + "method":"POST", + "requestUri":"/TimestampFormatHeaders", + "responseCode":200 + }, + "input":{"shape":"TimestampFormatHeadersIO"}, + "output":{"shape":"TimestampFormatHeadersIO"}, + "documentation":"This example tests how timestamp request and response headers are serialized.
" + }, + "UnitInputAndOutput":{ + "name":"UnitInputAndOutput", + "http":{ + "method":"POST", + "requestUri":"/UnitInputAndOutput", + "responseCode":200 + }, + "documentation":"This test is similar to NoInputAndNoOutput, but uses explicit Unit types.
" + } + }, + "shapes":{ + "AllQueryStringTypesInput":{ + "type":"structure", + "members":{ + "queryString":{ + "shape":"String", + "location":"querystring", + "locationName":"String" + }, + "queryStringList":{ + "shape":"StringList", + "location":"querystring", + "locationName":"StringList" + }, + "queryStringSet":{ + "shape":"StringSet", + "location":"querystring", + "locationName":"StringSet" + }, + "queryByte":{ + "shape":"Integer", + "location":"querystring", + "locationName":"Byte" + }, + "queryShort":{ + "shape":"Integer", + "location":"querystring", + "locationName":"Short" + }, + "queryInteger":{ + "shape":"Integer", + "location":"querystring", + "locationName":"Integer" + }, + "queryIntegerList":{ + "shape":"IntegerList", + "location":"querystring", + "locationName":"IntegerList" + }, + "queryIntegerSet":{ + "shape":"IntegerSet", + "location":"querystring", + "locationName":"IntegerSet" + }, + "queryLong":{ + "shape":"Long", + "location":"querystring", + "locationName":"Long" + }, + "queryFloat":{ + "shape":"Float", + "location":"querystring", + "locationName":"Float" + }, + "queryDouble":{ + "shape":"Double", + "location":"querystring", + "locationName":"Double" + }, + "queryDoubleList":{ + "shape":"DoubleList", + "location":"querystring", + "locationName":"DoubleList" + }, + "queryBoolean":{ + "shape":"Boolean", + "location":"querystring", + "locationName":"Boolean" + }, + "queryBooleanList":{ + "shape":"BooleanList", + "location":"querystring", + "locationName":"BooleanList" + }, + "queryTimestamp":{ + "shape":"Timestamp", + "location":"querystring", + "locationName":"Timestamp" + }, + "queryTimestampList":{ + "shape":"TimestampList", + "location":"querystring", + "locationName":"TimestampList" + }, + "queryEnum":{ + "shape":"FooEnum", + "location":"querystring", + "locationName":"Enum" + }, + "queryEnumList":{ + "shape":"FooEnumList", + "location":"querystring", + "locationName":"EnumList" + }, + "queryIntegerEnum":{ + "shape":"IntegerEnum", + "location":"querystring", + "locationName":"IntegerEnum" + }, + "queryIntegerEnumList":{ + "shape":"IntegerEnumList", + "location":"querystring", + "locationName":"IntegerEnumList" + }, + "queryParamsMapOfStringList":{ + "shape":"StringListMap", + "location":"querystring" + } + } + }, + "Blob":{"type":"blob"}, + "Boolean":{ + "type":"boolean", + "box":true + }, + "BooleanList":{ + "type":"list", + "member":{"shape":"Boolean"} + }, + "ComplexError":{ + "type":"structure", + "members":{ + "Header":{ + "shape":"String", + "location":"header", + "locationName":"X-Header" + }, + "TopLevel":{"shape":"String"}, + "Nested":{"shape":"ComplexNestedErrorData"} + }, + "documentation":"This error is thrown when a request is invalid.
", + "error":{ + "httpStatusCode":403, + "senderFault":true + }, + "exception":true + }, + "ComplexNestedErrorData":{ + "type":"structure", + "members":{ + "Foo":{ + "shape":"String", + "locationName":"Fooooo" + } + } + }, + "ConstantAndVariableQueryStringInput":{ + "type":"structure", + "members":{ + "baz":{ + "shape":"String", + "location":"querystring", + "locationName":"baz" + }, + "maybeSet":{ + "shape":"String", + "location":"querystring", + "locationName":"maybeSet" + } + } + }, + "ConstantQueryStringInput":{ + "type":"structure", + "required":["hello"], + "members":{ + "hello":{ + "shape":"String", + "location":"uri", + "locationName":"hello" + } + } + }, + "ContentTypeParametersInput":{ + "type":"structure", + "members":{ + "value":{"shape":"Integer"} + } + }, + "ContentTypeParametersOutput":{ + "type":"structure", + "members":{ + } + }, + "DateTime":{ + "type":"timestamp", + "timestampFormat":"iso8601" + }, + "DatetimeOffsetsOutput":{ + "type":"structure", + "members":{ + "datetime":{"shape":"DateTime"} + } + }, + "DenseBooleanMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"Boolean"} + }, + "DenseNumberMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"Integer"} + }, + "DenseSetMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"StringSet"} + }, + "DenseStringMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "DenseStructMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"GreetingStruct"} + }, + "Document":{ + "type":"structure", + "members":{ + }, + "document":true + }, + "DocumentTypeAsMapValueInputOutput":{ + "type":"structure", + "members":{ + "docValuedMap":{"shape":"DocumentValuedMap"} + } + }, + "DocumentTypeAsPayloadInputOutput":{ + "type":"structure", + "members":{ + "documentValue":{"shape":"Document"} + }, + "payload":"documentValue" + }, + "DocumentTypeInputOutput":{ + "type":"structure", + "members":{ + "stringValue":{"shape":"String"}, + "documentValue":{"shape":"Document"} + } + }, + "DocumentValuedMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"Document"} + }, + "Double":{ + "type":"double", + "box":true + }, + "DoubleList":{ + "type":"list", + "member":{"shape":"Double"} + }, + "EmptyInputAndEmptyOutputInput":{ + "type":"structure", + "members":{ + } + }, + "EmptyInputAndEmptyOutputOutput":{ + "type":"structure", + "members":{ + } + }, + "EnumPayloadInput":{ + "type":"structure", + "members":{ + "payload":{"shape":"StringEnum"} + }, + "payload":"payload" + }, + "EpochSeconds":{ + "type":"timestamp", + "timestampFormat":"unixTimestamp" + }, + "Float":{ + "type":"float", + "box":true + }, + "FooEnum":{ + "type":"string", + "enum":[ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList":{ + "type":"list", + "member":{"shape":"FooEnum"} + }, + "FooEnumMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"FooEnum"} + }, + "FooEnumSet":{ + "type":"list", + "member":{"shape":"FooEnum"} + }, + "FooError":{ + "type":"structure", + "members":{ + }, + "documentation":"This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.
", + "error":{"httpStatusCode":500}, + "exception":true, + "fault":true + }, + "FractionalSecondsOutput":{ + "type":"structure", + "members":{ + "datetime":{"shape":"DateTime"} + } + }, + "GreetingStruct":{ + "type":"structure", + "members":{ + "hi":{"shape":"String"} + } + }, + "GreetingWithErrorsOutput":{ + "type":"structure", + "members":{ + "greeting":{ + "shape":"String", + "location":"header", + "locationName":"X-Greeting" + } + } + }, + "HostLabelInput":{ + "type":"structure", + "required":["label"], + "members":{ + "label":{ + "shape":"String", + "hostLabel":true + } + } + }, + "HttpChecksumRequiredInputOutput":{ + "type":"structure", + "members":{ + "foo":{"shape":"String"} + } + }, + "HttpDate":{ + "type":"timestamp", + "timestampFormat":"rfc822" + }, + "HttpPayloadTraitsInputOutput":{ + "type":"structure", + "members":{ + "foo":{ + "shape":"String", + "location":"header", + "locationName":"X-Foo" + }, + "blob":{"shape":"Blob"} + }, + "payload":"blob" + }, + "HttpPayloadWithStructureInputOutput":{ + "type":"structure", + "members":{ + "nested":{"shape":"NestedPayload"} + }, + "payload":"nested" + }, + "HttpPayloadWithUnionInputOutput":{ + "type":"structure", + "members":{ + "nested":{"shape":"UnionPayload"} + }, + "payload":"nested" + }, + "HttpPrefixHeadersInResponseInput":{ + "type":"structure", + "members":{ + } + }, + "HttpPrefixHeadersInResponseOutput":{ + "type":"structure", + "members":{ + "prefixHeaders":{ + "shape":"StringMap", + "location":"headers", + "locationName":"" + } + } + }, + "HttpPrefixHeadersInput":{ + "type":"structure", + "members":{ + "foo":{ + "shape":"String", + "location":"header", + "locationName":"x-foo" + }, + "fooMap":{ + "shape":"StringMap", + "location":"headers", + "locationName":"x-foo-" + } + } + }, + "HttpPrefixHeadersOutput":{ + "type":"structure", + "members":{ + "foo":{ + "shape":"String", + "location":"header", + "locationName":"x-foo" + }, + "fooMap":{ + "shape":"StringMap", + "location":"headers", + "locationName":"x-foo-" + } + } + }, + "HttpRequestWithFloatLabelsInput":{ + "type":"structure", + "required":[ + "float", + "double" + ], + "members":{ + "float":{ + "shape":"Float", + "location":"uri", + "locationName":"float" + }, + "double":{ + "shape":"Double", + "location":"uri", + "locationName":"double" + } + } + }, + "HttpRequestWithGreedyLabelInPathInput":{ + "type":"structure", + "required":[ + "foo", + "baz" + ], + "members":{ + "foo":{ + "shape":"String", + "location":"uri", + "locationName":"foo" + }, + "baz":{ + "shape":"String", + "location":"uri", + "locationName":"baz" + } + } + }, + "HttpRequestWithLabelsAndTimestampFormatInput":{ + "type":"structure", + "required":[ + "memberEpochSeconds", + "memberHttpDate", + "memberDateTime", + "defaultFormat", + "targetEpochSeconds", + "targetHttpDate", + "targetDateTime" + ], + "members":{ + "memberEpochSeconds":{ + "shape":"SyntheticTimestamp_epoch_seconds", + "location":"uri", + "locationName":"memberEpochSeconds" + }, + "memberHttpDate":{ + "shape":"SyntheticTimestamp_http_date", + "location":"uri", + "locationName":"memberHttpDate" + }, + "memberDateTime":{ + "shape":"SyntheticTimestamp_date_time", + "location":"uri", + "locationName":"memberDateTime" + }, + "defaultFormat":{ + "shape":"Timestamp", + "location":"uri", + "locationName":"defaultFormat" + }, + "targetEpochSeconds":{ + "shape":"EpochSeconds", + "location":"uri", + "locationName":"targetEpochSeconds" + }, + "targetHttpDate":{ + "shape":"HttpDate", + "location":"uri", + "locationName":"targetHttpDate" + }, + "targetDateTime":{ + "shape":"DateTime", + "location":"uri", + "locationName":"targetDateTime" + } + } + }, + "HttpRequestWithLabelsInput":{ + "type":"structure", + "required":[ + "string", + "short", + "integer", + "long", + "float", + "double", + "boolean", + "timestamp" + ], + "members":{ + "string":{ + "shape":"String", + "location":"uri", + "locationName":"string" + }, + "short":{ + "shape":"Integer", + "location":"uri", + "locationName":"short" + }, + "integer":{ + "shape":"Integer", + "location":"uri", + "locationName":"integer" + }, + "long":{ + "shape":"Long", + "location":"uri", + "locationName":"long" + }, + "float":{ + "shape":"Float", + "location":"uri", + "locationName":"float" + }, + "double":{ + "shape":"Double", + "location":"uri", + "locationName":"double" + }, + "boolean":{ + "shape":"Boolean", + "documentation":"Serialized in the path as true or false.
", + "location":"uri", + "locationName":"boolean" + }, + "timestamp":{ + "shape":"Timestamp", + "documentation":"Note that this member has no format, so it's serialized as an RFC 3399 date-time.
", + "location":"uri", + "locationName":"timestamp" + } + } + }, + "HttpRequestWithRegexLiteralInput":{ + "type":"structure", + "required":["str"], + "members":{ + "str":{ + "shape":"String", + "location":"uri", + "locationName":"str" + } + } + }, + "HttpResponseCodeOutput":{ + "type":"structure", + "members":{ + "Status":{ + "shape":"Integer", + "location":"statusCode" + } + } + }, + "IgnoreQueryParamsInResponseOutput":{ + "type":"structure", + "members":{ + "baz":{ + "shape":"String", + "location":"uri", + "locationName":"baz" + } + } + }, + "InputAndOutputWithHeadersIO":{ + "type":"structure", + "members":{ + "headerString":{ + "shape":"String", + "location":"header", + "locationName":"X-String" + }, + "headerByte":{ + "shape":"Integer", + "location":"header", + "locationName":"X-Byte" + }, + "headerShort":{ + "shape":"Integer", + "location":"header", + "locationName":"X-Short" + }, + "headerInteger":{ + "shape":"Integer", + "location":"header", + "locationName":"X-Integer" + }, + "headerLong":{ + "shape":"Long", + "location":"header", + "locationName":"X-Long" + }, + "headerFloat":{ + "shape":"Float", + "location":"header", + "locationName":"X-Float" + }, + "headerDouble":{ + "shape":"Double", + "location":"header", + "locationName":"X-Double" + }, + "headerTrueBool":{ + "shape":"Boolean", + "location":"header", + "locationName":"X-Boolean1" + }, + "headerFalseBool":{ + "shape":"Boolean", + "location":"header", + "locationName":"X-Boolean2" + }, + "headerStringList":{ + "shape":"StringList", + "location":"header", + "locationName":"X-StringList" + }, + "headerStringSet":{ + "shape":"StringSet", + "location":"header", + "locationName":"X-StringSet" + }, + "headerIntegerList":{ + "shape":"IntegerList", + "location":"header", + "locationName":"X-IntegerList" + }, + "headerBooleanList":{ + "shape":"BooleanList", + "location":"header", + "locationName":"X-BooleanList" + }, + "headerTimestampList":{ + "shape":"TimestampList", + "location":"header", + "locationName":"X-TimestampList" + }, + "headerEnum":{ + "shape":"FooEnum", + "location":"header", + "locationName":"X-Enum" + }, + "headerEnumList":{ + "shape":"FooEnumList", + "location":"header", + "locationName":"X-EnumList" + }, + "headerIntegerEnum":{ + "shape":"IntegerEnum", + "location":"header", + "locationName":"X-IntegerEnum" + }, + "headerIntegerEnumList":{ + "shape":"IntegerEnumList", + "location":"header", + "locationName":"X-IntegerEnumList" + } + } + }, + "Integer":{ + "type":"integer", + "box":true + }, + "IntegerEnum":{ + "type":"integer", + "box":true + }, + "IntegerEnumList":{ + "type":"list", + "member":{"shape":"IntegerEnum"} + }, + "IntegerEnumMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"IntegerEnum"} + }, + "IntegerEnumSet":{ + "type":"list", + "member":{"shape":"IntegerEnum"} + }, + "IntegerList":{ + "type":"list", + "member":{"shape":"Integer"} + }, + "IntegerSet":{ + "type":"list", + "member":{"shape":"Integer"} + }, + "InvalidGreeting":{ + "type":"structure", + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"This error is thrown when an invalid greeting value is provided.
", + "error":{ + "httpStatusCode":400, + "senderFault":true + }, + "exception":true + }, + "JsonBlobsInputOutput":{ + "type":"structure", + "members":{ + "data":{"shape":"Blob"} + } + }, + "JsonEnumsInputOutput":{ + "type":"structure", + "members":{ + "fooEnum1":{"shape":"FooEnum"}, + "fooEnum2":{"shape":"FooEnum"}, + "fooEnum3":{"shape":"FooEnum"}, + "fooEnumList":{"shape":"FooEnumList"}, + "fooEnumSet":{"shape":"FooEnumSet"}, + "fooEnumMap":{"shape":"FooEnumMap"} + } + }, + "JsonIntEnumsInputOutput":{ + "type":"structure", + "members":{ + "integerEnum1":{"shape":"IntegerEnum"}, + "integerEnum2":{"shape":"IntegerEnum"}, + "integerEnum3":{"shape":"IntegerEnum"}, + "integerEnumList":{"shape":"IntegerEnumList"}, + "integerEnumSet":{"shape":"IntegerEnumSet"}, + "integerEnumMap":{"shape":"IntegerEnumMap"} + } + }, + "JsonListsInputOutput":{ + "type":"structure", + "members":{ + "stringList":{"shape":"StringList"}, + "stringSet":{"shape":"StringSet"}, + "integerList":{"shape":"IntegerList"}, + "booleanList":{"shape":"BooleanList"}, + "timestampList":{"shape":"TimestampList"}, + "enumList":{"shape":"FooEnumList"}, + "intEnumList":{"shape":"IntegerEnumList"}, + "nestedStringList":{"shape":"NestedStringList"}, + "structureList":{ + "shape":"StructureList", + "locationName":"myStructureList" + } + } + }, + "JsonMapsInputOutput":{ + "type":"structure", + "members":{ + "denseStructMap":{"shape":"DenseStructMap"}, + "denseNumberMap":{"shape":"DenseNumberMap"}, + "denseBooleanMap":{"shape":"DenseBooleanMap"}, + "denseStringMap":{"shape":"DenseStringMap"}, + "denseSetMap":{"shape":"DenseSetMap"} + } + }, + "JsonTimestampsInputOutput":{ + "type":"structure", + "members":{ + "normal":{"shape":"Timestamp"}, + "dateTime":{"shape":"SyntheticTimestamp_date_time"}, + "dateTimeOnTarget":{"shape":"DateTime"}, + "epochSeconds":{"shape":"SyntheticTimestamp_epoch_seconds"}, + "epochSecondsOnTarget":{"shape":"EpochSeconds"}, + "httpDate":{"shape":"SyntheticTimestamp_http_date"}, + "httpDateOnTarget":{"shape":"HttpDate"} + } + }, + "JsonValue":{"type":"string"}, + "Long":{ + "type":"long", + "box":true + }, + "MediaTypeHeaderInput":{ + "type":"structure", + "members":{ + "json":{ + "shape":"JsonValue", + "jsonvalue":true, + "location":"header", + "locationName":"X-Json" + } + } + }, + "MediaTypeHeaderOutput":{ + "type":"structure", + "members":{ + "json":{ + "shape":"JsonValue", + "jsonvalue":true, + "location":"header", + "locationName":"X-Json" + } + } + }, + "MyUnion":{ + "type":"structure", + "members":{ + "stringValue":{"shape":"String"}, + "booleanValue":{"shape":"Boolean"}, + "numberValue":{"shape":"Integer"}, + "blobValue":{"shape":"Blob"}, + "timestampValue":{"shape":"Timestamp"}, + "enumValue":{"shape":"FooEnum"}, + "listValue":{"shape":"StringList"}, + "mapValue":{"shape":"StringMap"}, + "structureValue":{"shape":"GreetingStruct"}, + "renamedStructureValue":{"shape":"RenamedGreeting"} + }, + "documentation":"A union with a representative set of types for members.
", + "union":true + }, + "NestedPayload":{ + "type":"structure", + "members":{ + "greeting":{"shape":"String"}, + "name":{"shape":"String"} + } + }, + "NestedStringList":{ + "type":"list", + "member":{"shape":"StringList"}, + "documentation":"A list of lists of strings.
" + }, + "NoInputAndOutputOutput":{ + "type":"structure", + "members":{ + } + }, + "NullAndEmptyHeadersIO":{ + "type":"structure", + "members":{ + "a":{ + "shape":"String", + "location":"header", + "locationName":"X-A" + }, + "b":{ + "shape":"String", + "location":"header", + "locationName":"X-B" + }, + "c":{ + "shape":"StringList", + "location":"header", + "locationName":"X-C" + } + } + }, + "OmitsNullSerializesEmptyStringInput":{ + "type":"structure", + "members":{ + "nullValue":{ + "shape":"String", + "location":"querystring", + "locationName":"Null" + }, + "emptyString":{ + "shape":"String", + "location":"querystring", + "locationName":"Empty" + } + } + }, + "OmitsSerializingEmptyListsInput":{ + "type":"structure", + "members":{ + "queryStringList":{ + "shape":"StringList", + "location":"querystring", + "locationName":"StringList" + }, + "queryIntegerList":{ + "shape":"IntegerList", + "location":"querystring", + "locationName":"IntegerList" + }, + "queryDoubleList":{ + "shape":"DoubleList", + "location":"querystring", + "locationName":"DoubleList" + }, + "queryBooleanList":{ + "shape":"BooleanList", + "location":"querystring", + "locationName":"BooleanList" + }, + "queryTimestampList":{ + "shape":"TimestampList", + "location":"querystring", + "locationName":"TimestampList" + }, + "queryEnumList":{ + "shape":"FooEnumList", + "location":"querystring", + "locationName":"EnumList" + }, + "queryIntegerEnumList":{ + "shape":"IntegerEnumList", + "location":"querystring", + "locationName":"IntegerEnumList" + } + } + }, + "PayloadConfig":{ + "type":"structure", + "members":{ + "data":{"shape":"Integer"} + } + }, + "PostUnionWithJsonNameInput":{ + "type":"structure", + "members":{ + "value":{"shape":"UnionWithJsonName"} + } + }, + "PostUnionWithJsonNameOutput":{ + "type":"structure", + "required":["value"], + "members":{ + "value":{"shape":"UnionWithJsonName"} + } + }, + "PutWithContentEncodingInput":{ + "type":"structure", + "members":{ + "encoding":{ + "shape":"String", + "location":"header", + "locationName":"Content-Encoding" + }, + "data":{"shape":"String"} + } + }, + "QueryIdempotencyTokenAutoFillInput":{ + "type":"structure", + "members":{ + "token":{ + "shape":"String", + "idempotencyToken":true, + "location":"querystring", + "locationName":"token" + } + } + }, + "QueryParamsAsStringListMapInput":{ + "type":"structure", + "members":{ + "qux":{ + "shape":"String", + "location":"querystring", + "locationName":"corge" + }, + "foo":{ + "shape":"StringListMap", + "location":"querystring" + } + } + }, + "QueryPrecedenceInput":{ + "type":"structure", + "members":{ + "foo":{ + "shape":"String", + "location":"querystring", + "locationName":"bar" + }, + "baz":{ + "shape":"StringMap", + "location":"querystring" + } + } + }, + "RecursiveShapesInputOutput":{ + "type":"structure", + "members":{ + "nested":{"shape":"RecursiveShapesInputOutputNested1"} + } + }, + "RecursiveShapesInputOutputNested1":{ + "type":"structure", + "members":{ + "foo":{"shape":"String"}, + "nested":{"shape":"RecursiveShapesInputOutputNested2"} + } + }, + "RecursiveShapesInputOutputNested2":{ + "type":"structure", + "members":{ + "bar":{"shape":"String"}, + "recursiveMember":{"shape":"RecursiveShapesInputOutputNested1"} + } + }, + "RenamedGreeting":{ + "type":"structure", + "members":{ + "salutation":{"shape":"String"} + } + }, + "ResponseCodeHttpFallbackInputOutput":{ + "type":"structure", + "members":{ + } + }, + "ResponseCodeRequiredOutput":{ + "type":"structure", + "required":["responseCode"], + "members":{ + "responseCode":{ + "shape":"Integer", + "location":"statusCode" + } + } + }, + "SimpleScalarPropertiesInputOutput":{ + "type":"structure", + "members":{ + "foo":{ + "shape":"String", + "location":"header", + "locationName":"X-Foo" + }, + "stringValue":{"shape":"String"}, + "trueBooleanValue":{"shape":"Boolean"}, + "falseBooleanValue":{"shape":"Boolean"}, + "byteValue":{"shape":"Integer"}, + "shortValue":{"shape":"Integer"}, + "integerValue":{"shape":"Integer"}, + "longValue":{"shape":"Long"}, + "floatValue":{"shape":"Float"}, + "doubleValue":{ + "shape":"Double", + "locationName":"DoubleDribble" + } + } + }, + "String":{"type":"string"}, + "StringEnum":{ + "type":"string", + "enum":["enumvalue"] + }, + "StringList":{ + "type":"list", + "member":{"shape":"String"} + }, + "StringListMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"StringList"} + }, + "StringMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "StringPayloadInput":{ + "type":"structure", + "members":{ + "payload":{"shape":"String"} + }, + "payload":"payload" + }, + "StringSet":{ + "type":"list", + "member":{"shape":"String"} + }, + "StructureList":{ + "type":"list", + "member":{"shape":"StructureListMember"} + }, + "StructureListMember":{ + "type":"structure", + "members":{ + "a":{ + "shape":"String", + "locationName":"value" + }, + "b":{ + "shape":"String", + "locationName":"other" + } + } + }, + "SyntheticTimestamp_date_time":{ + "type":"timestamp", + "timestampFormat":"iso8601" + }, + "SyntheticTimestamp_epoch_seconds":{ + "type":"timestamp", + "timestampFormat":"unixTimestamp" + }, + "SyntheticTimestamp_http_date":{ + "type":"timestamp", + "timestampFormat":"rfc822" + }, + "TestBodyStructureInputOutput":{ + "type":"structure", + "members":{ + "testId":{ + "shape":"String", + "location":"header", + "locationName":"x-amz-test-id" + }, + "testConfig":{"shape":"TestConfig"} + } + }, + "TestConfig":{ + "type":"structure", + "members":{ + "timeout":{"shape":"Integer"} + } + }, + "TestNoPayloadInputOutput":{ + "type":"structure", + "members":{ + "testId":{ + "shape":"String", + "location":"header", + "locationName":"X-Amz-Test-Id" + } + } + }, + "TestPayloadBlobInputOutput":{ + "type":"structure", + "members":{ + "contentType":{ + "shape":"String", + "location":"header", + "locationName":"Content-Type" + }, + "data":{"shape":"Blob"} + }, + "payload":"data" + }, + "TestPayloadStructureInputOutput":{ + "type":"structure", + "members":{ + "testId":{ + "shape":"String", + "location":"header", + "locationName":"x-amz-test-id" + }, + "payloadConfig":{"shape":"PayloadConfig"} + }, + "payload":"payloadConfig" + }, + "Timestamp":{"type":"timestamp"}, + "TimestampFormatHeadersIO":{ + "type":"structure", + "members":{ + "memberEpochSeconds":{ + "shape":"SyntheticTimestamp_epoch_seconds", + "location":"header", + "locationName":"X-memberEpochSeconds" + }, + "memberHttpDate":{ + "shape":"SyntheticTimestamp_http_date", + "location":"header", + "locationName":"X-memberHttpDate" + }, + "memberDateTime":{ + "shape":"SyntheticTimestamp_date_time", + "location":"header", + "locationName":"X-memberDateTime" + }, + "defaultFormat":{ + "shape":"Timestamp", + "location":"header", + "locationName":"X-defaultFormat" + }, + "targetEpochSeconds":{ + "shape":"EpochSeconds", + "location":"header", + "locationName":"X-targetEpochSeconds" + }, + "targetHttpDate":{ + "shape":"HttpDate", + "location":"header", + "locationName":"X-targetHttpDate" + }, + "targetDateTime":{ + "shape":"DateTime", + "location":"header", + "locationName":"X-targetDateTime" + } + } + }, + "TimestampList":{ + "type":"list", + "member":{"shape":"Timestamp"} + }, + "UnionInputOutput":{ + "type":"structure", + "members":{ + "contents":{"shape":"MyUnion"} + }, + "documentation":"A shared structure that contains a single union member.
" + }, + "UnionPayload":{ + "type":"structure", + "members":{ + "greeting":{"shape":"String"} + }, + "union":true + }, + "UnionWithJsonName":{ + "type":"structure", + "members":{ + "foo":{ + "shape":"String", + "locationName":"FOO" + }, + "bar":{"shape":"String"}, + "baz":{ + "shape":"String", + "locationName":"_baz" + } + }, + "union":true + } + }, + "documentation":"A REST JSON service that sends JSON requests and responses.
" +} diff --git a/tools/code-generation/protocol-tests/api-descriptions/rest-xml-protocol-2019-12-16.normal.json b/tools/code-generation/protocol-tests/api-descriptions/rest-xml-protocol-2019-12-16.normal.json new file mode 100644 index 00000000000..57c47de1a67 --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/rest-xml-protocol-2019-12-16.normal.json @@ -0,0 +1,2932 @@ +{ + "version": "2.0", + "metadata": { + "apiVersion": "2019-12-16", + "auth": [ + "aws.auth#sigv4" + ], + "endpointPrefix": "restxml", + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "serviceFullName": "Sample Rest Xml Protocol Service", + "serviceId": "Rest Xml Protocol", + "signatureVersion": "v4", + "signingName": "restxml", + "uid": "rest-xml-protocol-2019-12-16" + }, + "operations": { + "AllQueryStringTypes": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "BodyWithXmlName": { + "name": "BodyWithXmlName", + "http": { + "method": "PUT", + "requestUri": "/BodyWithXmlName", + "responseCode": 200 + }, + "input": { + "shape": "BodyWithXmlNameInputOutput", + "locationName": "BodyWithXmlNameRequest" + }, + "output": { + "shape": "BodyWithXmlNameInputOutput" + }, + "documentation": "The following example serializes a body that uses an XML name, changing the wrapper name.
", + "idempotent": true + }, + "ConstantAndVariableQueryString": { + "name": "ConstantAndVariableQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantAndVariableQueryString?foo=bar", + "responseCode": 200 + }, + "input": { + "shape": "ConstantAndVariableQueryStringInput" + }, + "documentation": "This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).
" + }, + "ConstantQueryString": { + "name": "ConstantQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantQueryString/{hello}?foo=bar&hello", + "responseCode": 200 + }, + "input": { + "shape": "ConstantQueryStringInput" + }, + "documentation": "This example uses a constant query string parameters and a label. This simply tests that labels and query string parameters are compatible. The fixed query string parameter named "hello" should in no way conflict with the label, {hello}
.
The example tests how servers must support requests containing a Content-Type
header with parameters.
The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "EndpointOperation": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointOperation", + "responseCode": 200 + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "EndpointWithHostLabelHeaderOperation": { + "name": "EndpointWithHostLabelHeaderOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointWithHostLabelHeaderOperation", + "responseCode": 200 + }, + "input": { + "shape": "HostLabelHeaderInput" + }, + "endpoint": { + "hostPrefix": "{accountId}." + } + }, + "EndpointWithHostLabelOperation": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointWithHostLabelOperation", + "responseCode": 200 + }, + "input": { + "shape": "EndpointWithHostLabelOperationRequest", + "locationName": "EndpointWithHostLabelOperationRequest" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "FlattenedXmlMap": { + "name": "FlattenedXmlMap", + "http": { + "method": "POST", + "requestUri": "/FlattenedXmlMap", + "responseCode": 200 + }, + "input": { + "shape": "FlattenedXmlMapRequest", + "locationName": "FlattenedXmlMapRequest" + }, + "output": { + "shape": "FlattenedXmlMapResponse" + }, + "documentation": "Flattened maps
" + }, + "FlattenedXmlMapWithXmlName": { + "name": "FlattenedXmlMapWithXmlName", + "http": { + "method": "POST", + "requestUri": "/FlattenedXmlMapWithXmlName", + "responseCode": 200 + }, + "input": { + "shape": "FlattenedXmlMapWithXmlNameRequest", + "locationName": "FlattenedXmlMapWithXmlNameRequest" + }, + "output": { + "shape": "FlattenedXmlMapWithXmlNameResponse" + }, + "documentation": "Flattened maps with @xmlName
" + }, + "FlattenedXmlMapWithXmlNamespace": { + "name": "FlattenedXmlMapWithXmlNamespace", + "http": { + "method": "POST", + "requestUri": "/FlattenedXmlMapWithXmlNamespace", + "responseCode": 200 + }, + "output": { + "shape": "FlattenedXmlMapWithXmlNamespaceOutput" + }, + "documentation": "Flattened maps with @xmlNamespace and @xmlName
" + }, + "FractionalSeconds": { + "name": "FractionalSeconds", + "http": { + "method": "POST", + "requestUri": "/FractionalSeconds", + "responseCode": 200 + }, + "output": { + "shape": "FractionalSecondsOutput" + } + }, + "GreetingWithErrors": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "output": { + "shape": "GreetingWithErrorsOutput" + }, + "errors": [ + { + "shape": "ComplexError" + }, + { + "shape": "InvalidGreeting" + } + ], + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true + }, + "HttpEnumPayload": { + "name": "HttpEnumPayload", + "http": { + "method": "POST", + "requestUri": "/EnumPayload", + "responseCode": 200 + }, + "input": { + "shape": "EnumPayloadInput" + }, + "output": { + "shape": "EnumPayloadInput" + } + }, + "HttpPayloadTraits": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "output": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no XML document is synthesized because the payload is not a structure or a union type.
" + }, + "HttpPayloadWithMemberXmlName": { + "name": "HttpPayloadWithMemberXmlName", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithMemberXmlName", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithMemberXmlNameInputOutput" + }, + "output": { + "shape": "HttpPayloadWithMemberXmlNameInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML name on the member, changing the wrapper name.
", + "idempotent": true + }, + "HttpPayloadWithStructure": { + "name": "HttpPayloadWithStructure", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithStructure", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithStructureInputOutput" + }, + "output": { + "shape": "HttpPayloadWithStructureInputOutput" + }, + "documentation": "This example serializes a structure in the payload.
Note that serializing a structure changes the wrapper element name to match the targeted structure.
", + "idempotent": true + }, + "HttpPayloadWithUnion": { + "name": "HttpPayloadWithUnion", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithUnion", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithUnionInputOutput" + }, + "output": { + "shape": "HttpPayloadWithUnionInputOutput" + }, + "documentation": "This example serializes a union in the payload.
", + "idempotent": true + }, + "HttpPayloadWithXmlName": { + "name": "HttpPayloadWithXmlName", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithXmlName", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithXmlNameInputOutput" + }, + "output": { + "shape": "HttpPayloadWithXmlNameInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML name, changing the wrapper name.
", + "idempotent": true + }, + "HttpPayloadWithXmlNamespace": { + "name": "HttpPayloadWithXmlNamespace", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithXmlNamespace", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithXmlNamespaceInputOutput" + }, + "output": { + "shape": "HttpPayloadWithXmlNamespaceInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML namespace.
", + "idempotent": true + }, + "HttpPayloadWithXmlNamespaceAndPrefix": { + "name": "HttpPayloadWithXmlNamespaceAndPrefix", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithXmlNamespaceAndPrefix", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithXmlNamespaceAndPrefixInputOutput" + }, + "output": { + "shape": "HttpPayloadWithXmlNamespaceAndPrefixInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML namespace.
", + "idempotent": true + }, + "HttpPrefixHeaders": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "input": { + "shape": "HttpPrefixHeadersInputOutput" + }, + "output": { + "shape": "HttpPrefixHeadersInputOutput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "HttpRequestWithFloatLabels": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "HttpRequestWithGreedyLabelInPath": { + "name": "HttpRequestWithGreedyLabelInPath", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithGreedyLabelInPath/foo/{foo}/baz/{baz+}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithGreedyLabelInPathInput" + } + }, + "HttpRequestWithLabels": { + "name": "HttpRequestWithLabels", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsInput" + }, + "documentation": "The example tests how requests are serialized when there's no input payload but there are HTTP labels.
" + }, + "HttpRequestWithLabelsAndTimestampFormat": { + "name": "HttpRequestWithLabelsAndTimestampFormat", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabelsAndTimestampFormat/{memberEpochSeconds}/{memberHttpDate}/{memberDateTime}/{defaultFormat}/{targetEpochSeconds}/{targetHttpDate}/{targetDateTime}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsAndTimestampFormatInput" + }, + "documentation": "The example tests how requests serialize different timestamp formats in the URI path.
" + }, + "HttpResponseCode": { + "name": "HttpResponseCode", + "http": { + "method": "PUT", + "requestUri": "/HttpResponseCode", + "responseCode": 200 + }, + "output": { + "shape": "HttpResponseCodeOutput" + }, + "idempotent": true + }, + "HttpStringPayload": { + "name": "HttpStringPayload", + "http": { + "method": "POST", + "requestUri": "/StringPayload", + "responseCode": 200 + }, + "input": { + "shape": "StringPayloadInput" + }, + "output": { + "shape": "StringPayloadInput" + } + }, + "IgnoreQueryParamsInResponse": { + "name": "IgnoreQueryParamsInResponse", + "http": { + "method": "GET", + "requestUri": "/IgnoreQueryParamsInResponse", + "responseCode": 200 + }, + "output": { + "shape": "IgnoreQueryParamsInResponseOutput" + }, + "documentation": "This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.
" + }, + "InputAndOutputWithHeaders": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "NestedXmlMapWithXmlName": { + "name": "NestedXmlMapWithXmlName", + "http": { + "method": "POST", + "requestUri": "/NestedXmlMapWithXmlName", + "responseCode": 200 + }, + "input": { + "shape": "NestedXmlMapWithXmlNameInputOutput", + "locationName": "NestedXmlMapWithXmlNameRequest" + }, + "output": { + "shape": "NestedXmlMapWithXmlNameInputOutput" + }, + "documentation": "Nested Xml Maps with key/values with @xmlName
" + }, + "NestedXmlMaps": { + "name": "NestedXmlMaps", + "http": { + "method": "POST", + "requestUri": "/NestedXmlMaps", + "responseCode": 200 + }, + "input": { + "shape": "NestedXmlMapsRequest", + "locationName": "NestedXmlMapsRequest" + }, + "output": { + "shape": "NestedXmlMapsResponse" + } + }, + "NoInputAndNoOutput": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndNoOutput", + "responseCode": 200 + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "NoInputAndOutput": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndOutputOutput", + "responseCode": 200 + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "NullAndEmptyHeadersClient": { + "name": "NullAndEmptyHeadersClient", + "http": { + "method": "GET", + "requestUri": "/NullAndEmptyHeadersClient", + "responseCode": 200 + }, + "input": { + "shape": "NullAndEmptyHeadersIO" + }, + "output": { + "shape": "NullAndEmptyHeadersIO" + }, + "documentation": "Null headers are not sent over the wire, empty headers are serialized to ""
" + }, + "NullAndEmptyHeadersServer": { + "name": "NullAndEmptyHeadersServer", + "http": { + "method": "GET", + "requestUri": "/NullAndEmptyHeadersServer", + "responseCode": 200 + }, + "input": { + "shape": "NullAndEmptyHeadersIO" + }, + "output": { + "shape": "NullAndEmptyHeadersIO" + }, + "documentation": "Null headers are not sent over the wire, empty headers are serialized to ""
" + }, + "OmitsNullSerializesEmptyString": { + "name": "OmitsNullSerializesEmptyString", + "http": { + "method": "GET", + "requestUri": "/OmitsNullSerializesEmptyString", + "responseCode": 200 + }, + "input": { + "shape": "OmitsNullSerializesEmptyStringInput" + }, + "documentation": "Omits null, but serializes empty string value.
" + }, + "PutWithContentEncoding": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/requestcompression/putcontentwithencoding", + "responseCode": 200 + }, + "input": { + "shape": "PutWithContentEncodingInput", + "locationName": "PutWithContentEncodingRequest" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "QueryIdempotencyTokenAutoFill": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/QueryIdempotencyTokenAutoFill", + "responseCode": 200 + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "QueryParamsAsStringListMap": { + "name": "QueryParamsAsStringListMap", + "http": { + "method": "POST", + "requestUri": "/StringListMap", + "responseCode": 200 + }, + "input": { + "shape": "QueryParamsAsStringListMapInput" + } + }, + "QueryPrecedence": { + "name": "QueryPrecedence", + "http": { + "method": "POST", + "requestUri": "/Precedence", + "responseCode": 200 + }, + "input": { + "shape": "QueryPrecedenceInput" + } + }, + "RecursiveShapes": { + "name": "RecursiveShapes", + "http": { + "method": "PUT", + "requestUri": "/RecursiveShapes", + "responseCode": 200 + }, + "input": { + "shape": "RecursiveShapesRequest", + "locationName": "RecursiveShapesRequest" + }, + "output": { + "shape": "RecursiveShapesResponse" + }, + "documentation": "Recursive shapes
", + "idempotent": true + }, + "SimpleScalarProperties": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesRequest", + "locationName": "SimpleScalarPropertiesRequest" + }, + "output": { + "shape": "SimpleScalarPropertiesResponse" + }, + "idempotent": true + }, + "TimestampFormatHeaders": { + "name": "TimestampFormatHeaders", + "http": { + "method": "POST", + "requestUri": "/TimestampFormatHeaders", + "responseCode": 200 + }, + "input": { + "shape": "TimestampFormatHeadersIO" + }, + "output": { + "shape": "TimestampFormatHeadersIO" + }, + "documentation": "The example tests how timestamp request and response headers are serialized.
" + }, + "XmlAttributes": { + "name": "XmlAttributes", + "http": { + "method": "PUT", + "requestUri": "/XmlAttributes", + "responseCode": 200 + }, + "input": { + "shape": "XmlAttributesRequest", + "locationName": "XmlAttributesRequest" + }, + "output": { + "shape": "XmlAttributesResponse" + }, + "documentation": "This example serializes an XML attributes on synthesized document.
", + "idempotent": true + }, + "XmlAttributesOnPayload": { + "name": "XmlAttributesOnPayload", + "http": { + "method": "PUT", + "requestUri": "/XmlAttributesOnPayload", + "responseCode": 200 + }, + "input": { + "shape": "XmlAttributesOnPayloadRequest" + }, + "output": { + "shape": "XmlAttributesOnPayloadResponse" + }, + "documentation": "This example serializes an XML attributes on a document targeted by httpPayload.
", + "idempotent": true + }, + "XmlBlobs": { + "name": "XmlBlobs", + "http": { + "method": "POST", + "requestUri": "/XmlBlobs", + "responseCode": 200 + }, + "input": { + "shape": "XmlBlobsRequest", + "locationName": "XmlBlobsRequest" + }, + "output": { + "shape": "XmlBlobsResponse" + }, + "documentation": "Blobs are base64 encoded
" + }, + "XmlEmptyBlobs": { + "name": "XmlEmptyBlobs", + "http": { + "method": "POST", + "requestUri": "/XmlEmptyBlobs", + "responseCode": 200 + }, + "input": { + "shape": "XmlEmptyBlobsRequest", + "locationName": "XmlEmptyBlobsRequest" + }, + "output": { + "shape": "XmlEmptyBlobsResponse" + }, + "documentation": "Blobs are base64 encoded
" + }, + "XmlEmptyLists": { + "name": "XmlEmptyLists", + "http": { + "method": "PUT", + "requestUri": "/XmlEmptyLists", + "responseCode": 200 + }, + "input": { + "shape": "XmlEmptyListsRequest", + "locationName": "XmlEmptyListsRequest" + }, + "output": { + "shape": "XmlEmptyListsResponse" + }, + "idempotent": true + }, + "XmlEmptyMaps": { + "name": "XmlEmptyMaps", + "http": { + "method": "POST", + "requestUri": "/XmlEmptyMaps", + "responseCode": 200 + }, + "input": { + "shape": "XmlEmptyMapsRequest", + "locationName": "XmlEmptyMapsRequest" + }, + "output": { + "shape": "XmlEmptyMapsResponse" + } + }, + "XmlEmptyStrings": { + "name": "XmlEmptyStrings", + "http": { + "method": "PUT", + "requestUri": "/XmlEmptyStrings", + "responseCode": 200 + }, + "input": { + "shape": "XmlEmptyStringsRequest", + "locationName": "XmlEmptyStringsRequest" + }, + "output": { + "shape": "XmlEmptyStringsResponse" + }, + "idempotent": true + }, + "XmlEnums": { + "name": "XmlEnums", + "http": { + "method": "PUT", + "requestUri": "/XmlEnums", + "responseCode": 200 + }, + "input": { + "shape": "XmlEnumsRequest", + "locationName": "XmlEnumsRequest" + }, + "output": { + "shape": "XmlEnumsResponse" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "XmlIntEnums": { + "name": "XmlIntEnums", + "http": { + "method": "PUT", + "requestUri": "/XmlIntEnums", + "responseCode": 200 + }, + "input": { + "shape": "XmlIntEnumsRequest", + "locationName": "XmlIntEnumsRequest" + }, + "output": { + "shape": "XmlIntEnumsResponse" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "XmlLists": { + "name": "XmlLists", + "http": { + "method": "PUT", + "requestUri": "/XmlLists", + "responseCode": 200 + }, + "input": { + "shape": "XmlListsRequest", + "locationName": "XmlListsRequest" + }, + "output": { + "shape": "XmlListsResponse" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
Maps with @xmlNamespace and @xmlName
" + }, + "XmlMaps": { + "name": "XmlMaps", + "http": { + "method": "POST", + "requestUri": "/XmlMaps", + "responseCode": 200 + }, + "input": { + "shape": "XmlMapsRequest", + "locationName": "XmlMapsRequest" + }, + "output": { + "shape": "XmlMapsResponse" + }, + "documentation": "The example tests basic map serialization.
" + }, + "XmlMapsXmlName": { + "name": "XmlMapsXmlName", + "http": { + "method": "POST", + "requestUri": "/XmlMapsXmlName", + "responseCode": 200 + }, + "input": { + "shape": "XmlMapsXmlNameRequest", + "locationName": "XmlMapsXmlNameRequest" + }, + "output": { + "shape": "XmlMapsXmlNameResponse" + } + }, + "XmlNamespaces": { + "name": "XmlNamespaces", + "http": { + "method": "POST", + "requestUri": "/XmlNamespaces", + "responseCode": 200 + }, + "input": { + "shape": "XmlNamespacesRequest", + "locationName": "XmlNamespacesRequest" + }, + "output": { + "shape": "XmlNamespacesResponse" + } + }, + "XmlTimestamps": { + "name": "XmlTimestamps", + "http": { + "method": "POST", + "requestUri": "/XmlTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "XmlTimestampsRequest", + "locationName": "XmlTimestampsRequest" + }, + "output": { + "shape": "XmlTimestampsResponse" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "XmlUnions": { + "name": "XmlUnions", + "http": { + "method": "PUT", + "requestUri": "/XmlUnions", + "responseCode": 200 + }, + "input": { + "shape": "XmlUnionsRequest", + "locationName": "XmlUnionsRequest" + }, + "output": { + "shape": "XmlUnionsResponse" + }, + "idempotent": true + } + }, + "shapes": { + "AllQueryStringTypesInput": { + "type": "structure", + "members": { + "queryString": { + "shape": "String", + "location": "querystring", + "locationName": "String" + }, + "queryStringList": { + "shape": "StringList", + "location": "querystring", + "locationName": "StringList" + }, + "queryStringSet": { + "shape": "StringSet", + "location": "querystring", + "locationName": "StringSet" + }, + "queryByte": { + "shape": "Integer", + "location": "querystring", + "locationName": "Byte" + }, + "queryShort": { + "shape": "Integer", + "location": "querystring", + "locationName": "Short" + }, + "queryInteger": { + "shape": "Integer", + "location": "querystring", + "locationName": "Integer" + }, + "queryIntegerList": { + "shape": "IntegerList", + "location": "querystring", + "locationName": "IntegerList" + }, + "queryIntegerSet": { + "shape": "IntegerSet", + "location": "querystring", + "locationName": "IntegerSet" + }, + "queryLong": { + "shape": "Long", + "location": "querystring", + "locationName": "Long" + }, + "queryFloat": { + "shape": "Float", + "location": "querystring", + "locationName": "Float" + }, + "queryDouble": { + "shape": "Double", + "location": "querystring", + "locationName": "Double" + }, + "queryDoubleList": { + "shape": "DoubleList", + "location": "querystring", + "locationName": "DoubleList" + }, + "queryBoolean": { + "shape": "Boolean", + "location": "querystring", + "locationName": "Boolean" + }, + "queryBooleanList": { + "shape": "BooleanList", + "location": "querystring", + "locationName": "BooleanList" + }, + "queryTimestamp": { + "shape": "Timestamp", + "location": "querystring", + "locationName": "Timestamp" + }, + "queryTimestampList": { + "shape": "TimestampList", + "location": "querystring", + "locationName": "TimestampList" + }, + "queryEnum": { + "shape": "FooEnum", + "location": "querystring", + "locationName": "Enum" + }, + "queryEnumList": { + "shape": "FooEnumList", + "location": "querystring", + "locationName": "EnumList" + }, + "queryIntegerEnum": { + "shape": "IntegerEnum", + "location": "querystring", + "locationName": "IntegerEnum" + }, + "queryIntegerEnumList": { + "shape": "IntegerEnumList", + "location": "querystring", + "locationName": "IntegerEnumList" + }, + "queryParamsMapOfStrings": { + "shape": "StringMap", + "location": "querystring" + } + } + }, + "Blob": { + "type": "blob" + }, + "BodyWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName" + } + }, + "locationName": "Ahoy" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "ComplexError": { + "type": "structure", + "members": { + "Header": { + "shape": "String", + "location": "header", + "locationName": "X-Header" + }, + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "error": { + "httpStatusCode": 403, + "senderFault": true + }, + "exception": true + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + }, + "ConstantAndVariableQueryStringInput": { + "type": "structure", + "members": { + "baz": { + "shape": "String", + "location": "querystring", + "locationName": "baz" + }, + "maybeSet": { + "shape": "String", + "location": "querystring", + "locationName": "maybeSet" + } + } + }, + "ConstantQueryStringInput": { + "type": "structure", + "required": [ + "hello" + ], + "members": { + "hello": { + "shape": "String", + "location": "uri", + "locationName": "hello" + } + } + }, + "ContentTypeParametersInput": { + "type": "structure", + "members": { + "value": { + "shape": "Integer" + } + } + }, + "ContentTypeParametersOutput": { + "type": "structure", + "members": {} + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "DatetimeOffsetsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "Double": { + "type": "double", + "box": true + }, + "DoubleList": { + "type": "list", + "member": { + "shape": "Double" + } + }, + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + }, + "EmptyInputAndEmptyOutputOutput": { + "type": "structure", + "members": {} + }, + "EndpointWithHostLabelOperationRequest": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "EnumPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "StringEnum" + } + }, + "payload": "payload" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "FlattenedXmlMapRequest": { + "type": "structure", + "members": { + "myMap": { + "shape": "FooEnumMap", + "flattened": true + } + } + }, + "FlattenedXmlMapResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "FooEnumMap", + "flattened": true + } + } + }, + "FlattenedXmlMapWithXmlNameInputOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K" + }, + "value": { + "shape": "String", + "locationName": "V" + } + }, + "FlattenedXmlMapWithXmlNameRequest": { + "type": "structure", + "members": { + "myMap": { + "shape": "FlattenedXmlMapWithXmlNameInputOutputMap", + "flattened": true, + "locationName": "KVP" + } + } + }, + "FlattenedXmlMapWithXmlNameResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "FlattenedXmlMapWithXmlNameInputOutputMap", + "flattened": true, + "locationName": "KVP" + } + } + }, + "FlattenedXmlMapWithXmlNamespaceOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "FlattenedXmlMapWithXmlNamespaceOutputMap", + "flattened": true, + "locationName": "KVP", + "xmlNamespace": "https://the-member.example.com" + } + } + }, + "FlattenedXmlMapWithXmlNamespaceOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K", + "xmlNamespace": "https://the-key.example.com" + }, + "value": { + "shape": "String", + "locationName": "V", + "xmlNamespace": "https://the-value.example.com" + } + }, + "Float": { + "type": "float", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooPrefixHeaders": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "FractionalSecondsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + }, + "GreetingWithErrorsOutput": { + "type": "structure", + "members": { + "greeting": { + "shape": "String", + "location": "header", + "locationName": "X-Greeting" + } + } + }, + "HostLabelHeaderInput": { + "type": "structure", + "required": [ + "accountId" + ], + "members": { + "accountId": { + "shape": "String", + "hostLabel": true, + "location": "header", + "locationName": "X-Amz-Account-Id" + } + } + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "HttpPayloadTraitsInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "blob": { + "shape": "Blob" + } + }, + "payload": "blob" + }, + "HttpPayloadWithMemberXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName", + "locationName": "Hola" + } + }, + "payload": "nested" + }, + "HttpPayloadWithStructureInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "NestedPayload", + "locationName": "NestedPayload" + } + }, + "payload": "nested" + }, + "HttpPayloadWithUnionInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "UnionPayload", + "locationName": "nested" + } + }, + "payload": "nested" + }, + "HttpPayloadWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName", + "locationName": "nested" + } + }, + "payload": "nested" + }, + "HttpPayloadWithXmlNamespaceAndPrefixInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlNamespaceAndPrefix", + "locationName": "nested" + } + }, + "payload": "nested" + }, + "HttpPayloadWithXmlNamespaceInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlNamespace", + "locationName": "nested" + } + }, + "payload": "nested" + }, + "HttpPrefixHeadersInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "x-foo" + }, + "fooMap": { + "shape": "FooPrefixHeaders", + "location": "headers", + "locationName": "x-foo-" + } + } + }, + "HttpRequestWithFloatLabelsInput": { + "type": "structure", + "required": [ + "float", + "double" + ], + "members": { + "float": { + "shape": "Float", + "location": "uri", + "locationName": "float" + }, + "double": { + "shape": "Double", + "location": "uri", + "locationName": "double" + } + } + }, + "HttpRequestWithGreedyLabelInPathInput": { + "type": "structure", + "required": [ + "foo", + "baz" + ], + "members": { + "foo": { + "shape": "String", + "location": "uri", + "locationName": "foo" + }, + "baz": { + "shape": "String", + "location": "uri", + "locationName": "baz" + } + } + }, + "HttpRequestWithLabelsAndTimestampFormatInput": { + "type": "structure", + "required": [ + "memberEpochSeconds", + "memberHttpDate", + "memberDateTime", + "defaultFormat", + "targetEpochSeconds", + "targetHttpDate", + "targetDateTime" + ], + "members": { + "memberEpochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds", + "location": "uri", + "locationName": "memberEpochSeconds" + }, + "memberHttpDate": { + "shape": "SyntheticTimestamp_http_date", + "location": "uri", + "locationName": "memberHttpDate" + }, + "memberDateTime": { + "shape": "SyntheticTimestamp_date_time", + "location": "uri", + "locationName": "memberDateTime" + }, + "defaultFormat": { + "shape": "Timestamp", + "location": "uri", + "locationName": "defaultFormat" + }, + "targetEpochSeconds": { + "shape": "EpochSeconds", + "location": "uri", + "locationName": "targetEpochSeconds" + }, + "targetHttpDate": { + "shape": "HttpDate", + "location": "uri", + "locationName": "targetHttpDate" + }, + "targetDateTime": { + "shape": "DateTime", + "location": "uri", + "locationName": "targetDateTime" + } + } + }, + "HttpRequestWithLabelsInput": { + "type": "structure", + "required": [ + "string", + "short", + "integer", + "long", + "float", + "double", + "boolean", + "timestamp" + ], + "members": { + "string": { + "shape": "String", + "location": "uri", + "locationName": "string" + }, + "short": { + "shape": "Integer", + "location": "uri", + "locationName": "short" + }, + "integer": { + "shape": "Integer", + "location": "uri", + "locationName": "integer" + }, + "long": { + "shape": "Long", + "location": "uri", + "locationName": "long" + }, + "float": { + "shape": "Float", + "location": "uri", + "locationName": "float" + }, + "double": { + "shape": "Double", + "location": "uri", + "locationName": "double" + }, + "boolean": { + "shape": "Boolean", + "documentation": "Serialized in the path as true or false.
", + "location": "uri", + "locationName": "boolean" + }, + "timestamp": { + "shape": "Timestamp", + "documentation": "Note that this member has no format, so it's serialized as an RFC 3399 date-time.
", + "location": "uri", + "locationName": "timestamp" + } + } + }, + "HttpResponseCodeOutput": { + "type": "structure", + "members": { + "Status": { + "shape": "Integer", + "location": "statusCode" + } + } + }, + "IgnoreQueryParamsInResponseOutput": { + "type": "structure", + "members": { + "baz": { + "shape": "String", + "location": "uri", + "locationName": "baz" + } + } + }, + "InputAndOutputWithHeadersIO": { + "type": "structure", + "members": { + "headerString": { + "shape": "String", + "location": "header", + "locationName": "X-String" + }, + "headerByte": { + "shape": "Integer", + "location": "header", + "locationName": "X-Byte" + }, + "headerShort": { + "shape": "Integer", + "location": "header", + "locationName": "X-Short" + }, + "headerInteger": { + "shape": "Integer", + "location": "header", + "locationName": "X-Integer" + }, + "headerLong": { + "shape": "Long", + "location": "header", + "locationName": "X-Long" + }, + "headerFloat": { + "shape": "Float", + "location": "header", + "locationName": "X-Float" + }, + "headerDouble": { + "shape": "Double", + "location": "header", + "locationName": "X-Double" + }, + "headerTrueBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean1" + }, + "headerFalseBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean2" + }, + "headerStringList": { + "shape": "StringList", + "location": "header", + "locationName": "X-StringList" + }, + "headerStringSet": { + "shape": "StringSet", + "location": "header", + "locationName": "X-StringSet" + }, + "headerIntegerList": { + "shape": "IntegerList", + "location": "header", + "locationName": "X-IntegerList" + }, + "headerBooleanList": { + "shape": "BooleanList", + "location": "header", + "locationName": "X-BooleanList" + }, + "headerTimestampList": { + "shape": "TimestampList", + "location": "header", + "locationName": "X-TimestampList" + }, + "headerEnum": { + "shape": "FooEnum", + "location": "header", + "locationName": "X-Enum" + }, + "headerEnumList": { + "shape": "FooEnumList", + "location": "header", + "locationName": "X-EnumList" + } + } + }, + "Integer": { + "type": "integer", + "box": true + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "IntegerSet": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "InvalidGreeting": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "documentation": "This error is thrown when an invalid greeting value is provided.
", + "error": { + "httpStatusCode": 400, + "senderFault": true + }, + "exception": true + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "Long": { + "type": "long", + "box": true + }, + "NestedMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnumMap" + } + }, + "NestedPayload": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + }, + "name": { + "shape": "String" + } + } + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "NestedXmlMapWithXmlNameInnerMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "InnerKey" + }, + "value": { + "shape": "String", + "locationName": "InnerValue" + } + }, + "NestedXmlMapWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nestedXmlMapWithXmlNameMap": { + "shape": "NestedXmlMapWithXmlNameMap" + } + } + }, + "NestedXmlMapWithXmlNameMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "OuterKey" + }, + "value": { + "shape": "NestedXmlMapWithXmlNameInnerMap" + } + }, + "NestedXmlMapsRequest": { + "type": "structure", + "members": { + "nestedMap": { + "shape": "NestedMap" + }, + "flatNestedMap": { + "shape": "NestedMap", + "flattened": true + } + } + }, + "NestedXmlMapsResponse": { + "type": "structure", + "members": { + "nestedMap": { + "shape": "NestedMap" + }, + "flatNestedMap": { + "shape": "NestedMap", + "flattened": true + } + } + }, + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + }, + "NullAndEmptyHeadersIO": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "location": "header", + "locationName": "X-A" + }, + "b": { + "shape": "String", + "location": "header", + "locationName": "X-B" + }, + "c": { + "shape": "StringList", + "location": "header", + "locationName": "X-C" + } + } + }, + "OmitsNullSerializesEmptyStringInput": { + "type": "structure", + "members": { + "nullValue": { + "shape": "String", + "location": "querystring", + "locationName": "Null" + }, + "emptyString": { + "shape": "String", + "location": "querystring", + "locationName": "Empty" + } + } + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "PayloadWithXmlNamespace": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "xmlNamespace": "http://foo.com" + }, + "PayloadWithXmlNamespaceAndPrefix": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "xmlNamespace": { + "prefix": "baz", + "uri": "http://foo.com" + } + }, + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String", + "location": "header", + "locationName": "Content-Encoding" + }, + "data": { + "shape": "String" + } + } + }, + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true, + "location": "querystring", + "locationName": "token" + } + } + }, + "QueryParamsAsStringListMapInput": { + "type": "structure", + "members": { + "qux": { + "shape": "String", + "location": "querystring", + "locationName": "corge" + }, + "foo": { + "shape": "StringListMap", + "location": "querystring" + } + } + }, + "QueryPrecedenceInput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "querystring", + "locationName": "bar" + }, + "baz": { + "shape": "StringMap", + "location": "querystring" + } + } + }, + "RecursiveShapesInputOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveShapesInputOutputNested2" + } + } + }, + "RecursiveShapesInputOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesRequest": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesResponse": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "SimpleScalarPropertiesRequest": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "stringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "SimpleScalarPropertiesResponse": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "stringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "String": { + "type": "string" + }, + "StringEnum": { + "type": "string", + "enum": [ + "enumvalue" + ] + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringListMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringList" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "StringPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "String" + } + }, + "payload": "payload" + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "Timestamp": { + "type": "timestamp" + }, + "TimestampFormatHeadersIO": { + "type": "structure", + "members": { + "memberEpochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds", + "location": "header", + "locationName": "X-memberEpochSeconds" + }, + "memberHttpDate": { + "shape": "SyntheticTimestamp_http_date", + "location": "header", + "locationName": "X-memberHttpDate" + }, + "memberDateTime": { + "shape": "SyntheticTimestamp_date_time", + "location": "header", + "locationName": "X-memberDateTime" + }, + "defaultFormat": { + "shape": "Timestamp", + "location": "header", + "locationName": "X-defaultFormat" + }, + "targetEpochSeconds": { + "shape": "EpochSeconds", + "location": "header", + "locationName": "X-targetEpochSeconds" + }, + "targetHttpDate": { + "shape": "HttpDate", + "location": "header", + "locationName": "X-targetHttpDate" + }, + "targetDateTime": { + "shape": "DateTime", + "location": "header", + "locationName": "X-targetDateTime" + } + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "UnionPayload": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + } + }, + "union": true + }, + "XmlAttributesOnPayloadRequest": { + "type": "structure", + "members": { + "payload": { + "shape": "XmlAttributesPayloadRequest", + "locationName": "payload" + } + }, + "payload": "payload" + }, + "XmlAttributesOnPayloadResponse": { + "type": "structure", + "members": { + "payload": { + "shape": "XmlAttributesPayloadResponse" + } + }, + "payload": "payload" + }, + "XmlAttributesPayloadRequest": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "attr": { + "shape": "String", + "locationName": "test", + "xmlAttribute": true + } + } + }, + "XmlAttributesPayloadResponse": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "attr": { + "shape": "String", + "locationName": "test", + "xmlAttribute": true + } + } + }, + "XmlAttributesRequest": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "attr": { + "shape": "String", + "locationName": "test", + "xmlAttribute": true + } + } + }, + "XmlAttributesResponse": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "attr": { + "shape": "String", + "locationName": "test", + "xmlAttribute": true + } + } + }, + "XmlBlobsRequest": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "XmlBlobsResponse": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "XmlEmptyBlobsRequest": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "XmlEmptyBlobsResponse": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "XmlEmptyListsRequest": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "renamedListMembers": { + "shape": "RenamedListMembers", + "locationName": "renamed" + }, + "flattenedList": { + "shape": "RenamedListMembers", + "flattened": true + }, + "flattenedList2": { + "shape": "RenamedListMembers", + "flattened": true, + "locationName": "customName" + }, + "flattenedListWithMemberNamespace": { + "shape": "ListWithMemberNamespace", + "flattened": true + }, + "flattenedListWithNamespace": { + "shape": "ListWithNamespace", + "flattened": true + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + }, + "flattenedStructureList": { + "shape": "StructureList", + "flattened": true + } + } + }, + "XmlEmptyListsResponse": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "renamedListMembers": { + "shape": "RenamedListMembers", + "locationName": "renamed" + }, + "flattenedList": { + "shape": "RenamedListMembers", + "flattened": true + }, + "flattenedList2": { + "shape": "RenamedListMembers", + "flattened": true, + "locationName": "customName" + }, + "flattenedListWithMemberNamespace": { + "shape": "ListWithMemberNamespace", + "flattened": true + }, + "flattenedListWithNamespace": { + "shape": "ListWithNamespace", + "flattened": true + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + }, + "flattenedStructureList": { + "shape": "StructureList", + "flattened": true + } + } + }, + "XmlEmptyMapsRequest": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsInputOutputMap" + } + } + }, + "XmlEmptyMapsResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsInputOutputMap" + } + } + }, + "XmlEmptyStringsRequest": { + "type": "structure", + "members": { + "emptyString": { + "shape": "String" + } + } + }, + "XmlEmptyStringsResponse": { + "type": "structure", + "members": { + "emptyString": { + "shape": "String" + } + } + }, + "XmlEnumsRequest": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "XmlEnumsResponse": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "XmlIntEnumsRequest": { + "type": "structure", + "members": { + "intEnum1": { + "shape": "IntegerEnum" + }, + "intEnum2": { + "shape": "IntegerEnum" + }, + "intEnum3": { + "shape": "IntegerEnum" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "intEnumSet": { + "shape": "IntegerEnumSet" + }, + "intEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "XmlIntEnumsResponse": { + "type": "structure", + "members": { + "intEnum1": { + "shape": "IntegerEnum" + }, + "intEnum2": { + "shape": "IntegerEnum" + }, + "intEnum3": { + "shape": "IntegerEnum" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "intEnumSet": { + "shape": "IntegerEnumSet" + }, + "intEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "XmlListsRequest": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "renamedListMembers": { + "shape": "RenamedListMembers", + "locationName": "renamed" + }, + "flattenedList": { + "shape": "RenamedListMembers", + "flattened": true + }, + "flattenedList2": { + "shape": "RenamedListMembers", + "flattened": true, + "locationName": "customName" + }, + "flattenedListWithMemberNamespace": { + "shape": "ListWithMemberNamespace", + "flattened": true + }, + "flattenedListWithNamespace": { + "shape": "ListWithNamespace", + "flattened": true + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + }, + "flattenedStructureList": { + "shape": "StructureList", + "flattened": true + } + } + }, + "XmlListsResponse": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "renamedListMembers": { + "shape": "RenamedListMembers", + "locationName": "renamed" + }, + "flattenedList": { + "shape": "RenamedListMembers", + "flattened": true + }, + "flattenedList2": { + "shape": "RenamedListMembers", + "flattened": true, + "locationName": "customName" + }, + "flattenedListWithMemberNamespace": { + "shape": "ListWithMemberNamespace", + "flattened": true + }, + "flattenedListWithNamespace": { + "shape": "ListWithNamespace", + "flattened": true + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + }, + "flattenedStructureList": { + "shape": "StructureList", + "flattened": true + } + } + }, + "XmlMapWithXmlNamespaceInputOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K", + "xmlNamespace": "https://the-key.example.com" + }, + "value": { + "shape": "String", + "locationName": "V", + "xmlNamespace": "https://the-value.example.com" + } + }, + "XmlMapWithXmlNamespaceRequest": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapWithXmlNamespaceInputOutputMap", + "locationName": "KVP", + "xmlNamespace": "https://the-member.example.com" + } + } + }, + "XmlMapWithXmlNamespaceResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapWithXmlNamespaceInputOutputMap", + "locationName": "KVP", + "xmlNamespace": "https://the-member.example.com" + } + } + }, + "XmlMapsInputOutputMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "GreetingStruct" + } + }, + "XmlMapsRequest": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsInputOutputMap" + } + } + }, + "XmlMapsResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsInputOutputMap" + } + } + }, + "XmlMapsXmlNameInputOutputMap": { + "type": "map", + "key": { + "shape": "String", + "locationName": "Attribute" + }, + "value": { + "shape": "GreetingStruct", + "locationName": "Setting" + } + }, + "XmlMapsXmlNameRequest": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsXmlNameInputOutputMap" + } + } + }, + "XmlMapsXmlNameResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "XmlMapsXmlNameInputOutputMap" + } + } + }, + "XmlNamespaceNested": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "xmlNamespace": { + "prefix": "baz", + "uri": "http://baz.com" + } + }, + "values": { + "shape": "XmlNamespacedList", + "xmlNamespace": "http://qux.com" + } + }, + "xmlNamespace": "http://foo.com" + }, + "XmlNamespacedList": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "http://bux.com" + } + }, + "XmlNamespacesRequest": { + "type": "structure", + "members": { + "nested": { + "shape": "XmlNamespaceNested" + } + }, + "xmlNamespace": "http://foo.com" + }, + "XmlNamespacesResponse": { + "type": "structure", + "members": { + "nested": { + "shape": "XmlNamespaceNested" + } + }, + "xmlNamespace": "http://foo.com" + }, + "XmlNestedUnionStruct": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double" + } + } + }, + "XmlTimestampsRequest": { + "type": "structure", + "members": { + "normal": { + "shape": "Timestamp" + }, + "dateTime": { + "shape": "SyntheticTimestamp_date_time" + }, + "dateTimeOnTarget": { + "shape": "DateTime" + }, + "epochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochSecondsOnTarget": { + "shape": "EpochSeconds" + }, + "httpDate": { + "shape": "SyntheticTimestamp_http_date" + }, + "httpDateOnTarget": { + "shape": "HttpDate" + } + } + }, + "XmlTimestampsResponse": { + "type": "structure", + "members": { + "normal": { + "shape": "Timestamp" + }, + "dateTime": { + "shape": "SyntheticTimestamp_date_time" + }, + "dateTimeOnTarget": { + "shape": "DateTime" + }, + "epochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochSecondsOnTarget": { + "shape": "EpochSeconds" + }, + "httpDate": { + "shape": "SyntheticTimestamp_http_date" + }, + "httpDateOnTarget": { + "shape": "HttpDate" + } + } + }, + "XmlUnionShape": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double" + }, + "unionValue": { + "shape": "XmlUnionShape" + }, + "structValue": { + "shape": "XmlNestedUnionStruct" + } + }, + "union": true + }, + "XmlUnionsRequest": { + "type": "structure", + "members": { + "unionValue": { + "shape": "XmlUnionShape" + } + } + }, + "XmlUnionsResponse": { + "type": "structure", + "members": { + "unionValue": { + "shape": "XmlUnionShape" + } + } + } + }, + "documentation": "A REST XML service that sends XML requests and responses.
" +} \ No newline at end of file diff --git a/tools/code-generation/protocol-tests/api-descriptions/rest-xml-protocol-namespace-2019-12-16.normal.json b/tools/code-generation/protocol-tests/api-descriptions/rest-xml-protocol-namespace-2019-12-16.normal.json new file mode 100644 index 00000000000..65b7e98c25e --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/rest-xml-protocol-namespace-2019-12-16.normal.json @@ -0,0 +1,121 @@ +{ + "version": "2.0", + "metadata": { + "apiVersion": "2019-12-16", + "auth": [ + "aws.auth#sigv4" + ], + "endpointPrefix": "restxmlwithnamespace", + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "serviceFullName": "Sample Rest Xml Protocol Service With Namespace", + "serviceId": "Rest Xml Protocol Namespace", + "signatureVersion": "v4", + "signingName": "restxmlwithnamespace", + "uid": "rest-xml-protocol-namespace-2019-12-16" + }, + "operations": { + "SimpleScalarProperties": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput", + "locationName": "SimpleScalarPropertiesRequest", + "xmlNamespace": { + "uri": "https://example.com" + } + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + } + }, + "shapes": { + "Boolean": { + "type": "boolean", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "NestedWithNamespace": { + "type": "structure", + "members": { + "attrField": { + "shape": "String", + "locationName": "xsi:someName", + "xmlAttribute": true + } + } + }, + "SimpleScalarPropertiesInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "stringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "Nested": { + "shape": "NestedWithNamespace", + "xmlNamespace": { + "prefix": "xsi", + "uri": "https://example.com" + } + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "String": { + "type": "string" + } + }, + "documentation": "A REST XML service that sends XML requests and responses.
This service and test case is complementary to the test cases in the restXml
directory, but the service under test here has the xmlNamespace
trait applied to it.
See https://github.com/awslabs/smithy/issues/616
" +} \ No newline at end of file diff --git a/tools/code-generation/protocol-tests/api-descriptions/rpcv2protocol-2020-07-14.normal.json b/tools/code-generation/protocol-tests/api-descriptions/rpcv2protocol-2020-07-14.normal.json new file mode 100644 index 00000000000..dff3518f744 --- /dev/null +++ b/tools/code-generation/protocol-tests/api-descriptions/rpcv2protocol-2020-07-14.normal.json @@ -0,0 +1,390 @@ +{ + "version":"2.0", + "metadata":{ + "apiVersion":"2020-07-14", + "auth":["aws.auth#sigv4"], + "endpointPrefix":"rpcv2protocol", + "protocol":"smithy-rpc-v2-cbor", + "protocols":["smithy-rpc-v2-cbor"], + "serviceFullName":"RpcV2 Protocol Service", + "serviceId":"RpcV2Protocol", + "signatureVersion":"v4", + "signingName":"rpcv2protocol", + "targetPrefix":"RpcV2Protocol", + "uid":"rpcv2protocol-2020-07-14" + }, + "operations":{ + "EmptyInputOutput":{ + "name":"EmptyInputOutput", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"EmptyStructure"}, + "output":{"shape":"EmptyStructure"} + }, + "Float16":{ + "name":"Float16", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "output":{"shape":"Float16Output"} + }, + "FractionalSeconds":{ + "name":"FractionalSeconds", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "output":{"shape":"FractionalSecondsOutput"} + }, + "GreetingWithErrors":{ + "name":"GreetingWithErrors", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "output":{"shape":"GreetingWithErrorsOutput"}, + "errors":[ + {"shape":"ComplexError"}, + {"shape":"InvalidGreeting"} + ], + "documentation":"This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent":true + }, + "NoInputOutput":{ + "name":"NoInputOutput", + "http":{ + "method":"POST", + "requestUri":"/" + } + }, + "OptionalInputOutput":{ + "name":"OptionalInputOutput", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"SimpleStructure"}, + "output":{"shape":"SimpleStructure"} + }, + "RecursiveShapes":{ + "name":"RecursiveShapes", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"RecursiveShapesInputOutput"}, + "output":{"shape":"RecursiveShapesInputOutput"} + }, + "RpcV2CborDenseMaps":{ + "name":"RpcV2CborDenseMaps", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"RpcV2CborDenseMapsInputOutput"}, + "output":{"shape":"RpcV2CborDenseMapsInputOutput"}, + "errors":[ + {"shape":"ValidationException"} + ], + "documentation":"The example tests basic map serialization.
" + }, + "RpcV2CborLists":{ + "name":"RpcV2CborLists", + "http":{ + "method":"POST", + "requestUri":"/" + }, + "input":{"shape":"RpcV2CborListInputOutput"}, + "output":{"shape":"RpcV2CborListInputOutput"}, + "errors":[ + {"shape":"ValidationException"} + ], + "documentation":"This test case serializes JSON lists for the following cases for both input and output:
This error is thrown when a request is invalid.
", + "exception":true + }, + "ComplexNestedErrorData":{ + "type":"structure", + "members":{ + "Foo":{"shape":"String"} + } + }, + "DateTime":{ + "type":"timestamp", + "timestampFormat":"iso8601" + }, + "DenseBooleanMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"Boolean"} + }, + "DenseNumberMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"Integer"} + }, + "DenseSetMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"StringSet"} + }, + "DenseStringMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"String"} + }, + "DenseStructMap":{ + "type":"map", + "key":{"shape":"String"}, + "value":{"shape":"GreetingStruct"} + }, + "Double":{ + "type":"double", + "box":true + }, + "EmptyStructure":{ + "type":"structure", + "members":{ + } + }, + "Float":{ + "type":"float", + "box":true + }, + "Float16Output":{ + "type":"structure", + "members":{ + "value":{"shape":"Double"} + } + }, + "FooEnum":{ + "type":"string", + "enum":[ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList":{ + "type":"list", + "member":{"shape":"FooEnum"} + }, + "FractionalSecondsOutput":{ + "type":"structure", + "members":{ + "datetime":{"shape":"DateTime"} + } + }, + "GreetingStruct":{ + "type":"structure", + "members":{ + "hi":{"shape":"String"} + } + }, + "GreetingWithErrorsOutput":{ + "type":"structure", + "members":{ + "greeting":{"shape":"String"} + } + }, + "Integer":{ + "type":"integer", + "box":true + }, + "IntegerEnum":{ + "type":"integer", + "box":true + }, + "IntegerEnumList":{ + "type":"list", + "member":{"shape":"IntegerEnum"} + }, + "IntegerList":{ + "type":"list", + "member":{"shape":"Integer"} + }, + "InvalidGreeting":{ + "type":"structure", + "members":{ + "Message":{"shape":"String"} + }, + "documentation":"This error is thrown when an invalid greeting value is provided.
", + "exception":true + }, + "Long":{ + "type":"long", + "box":true + }, + "NestedStringList":{ + "type":"list", + "member":{"shape":"StringList"}, + "documentation":"A list of lists of strings.
" + }, + "RecursiveShapesInputOutput":{ + "type":"structure", + "members":{ + "nested":{"shape":"RecursiveShapesInputOutputNested1"} + } + }, + "RecursiveShapesInputOutputNested1":{ + "type":"structure", + "members":{ + "foo":{"shape":"String"}, + "nested":{"shape":"RecursiveShapesInputOutputNested2"} + } + }, + "RecursiveShapesInputOutputNested2":{ + "type":"structure", + "members":{ + "bar":{"shape":"String"}, + "recursiveMember":{"shape":"RecursiveShapesInputOutputNested1"} + } + }, + "RpcV2CborDenseMapsInputOutput":{ + "type":"structure", + "members":{ + "denseStructMap":{"shape":"DenseStructMap"}, + "denseNumberMap":{"shape":"DenseNumberMap"}, + "denseBooleanMap":{"shape":"DenseBooleanMap"}, + "denseStringMap":{"shape":"DenseStringMap"}, + "denseSetMap":{"shape":"DenseSetMap"} + } + }, + "RpcV2CborListInputOutput":{ + "type":"structure", + "members":{ + "stringList":{"shape":"StringList"}, + "stringSet":{"shape":"StringSet"}, + "integerList":{"shape":"IntegerList"}, + "booleanList":{"shape":"BooleanList"}, + "timestampList":{"shape":"TimestampList"}, + "enumList":{"shape":"FooEnumList"}, + "intEnumList":{"shape":"IntegerEnumList"}, + "nestedStringList":{"shape":"NestedStringList"}, + "structureList":{"shape":"StructureList"}, + "blobList":{"shape":"BlobList"} + } + }, + "SimpleScalarStructure":{ + "type":"structure", + "members":{ + "trueBooleanValue":{"shape":"Boolean"}, + "falseBooleanValue":{"shape":"Boolean"}, + "byteValue":{"shape":"Integer"}, + "doubleValue":{"shape":"Double"}, + "floatValue":{"shape":"Float"}, + "integerValue":{"shape":"Integer"}, + "longValue":{"shape":"Long"}, + "shortValue":{"shape":"Integer"}, + "stringValue":{"shape":"String"}, + "blobValue":{"shape":"Blob"} + } + }, + "SimpleStructure":{ + "type":"structure", + "members":{ + "value":{"shape":"String"} + } + }, + "String":{"type":"string"}, + "StringList":{ + "type":"list", + "member":{"shape":"String"} + }, + "StringSet":{ + "type":"list", + "member":{"shape":"String"} + }, + "StructureList":{ + "type":"list", + "member":{"shape":"StructureListMember"} + }, + "StructureListMember":{ + "type":"structure", + "members":{ + "a":{"shape":"String"}, + "b":{"shape":"String"} + } + }, + "Timestamp":{"type":"timestamp"}, + "TimestampList":{ + "type":"list", + "member":{"shape":"Timestamp"} + }, + "ValidationException":{ + "type":"structure", + "required":["message"], + "members":{ + "message":{ + "shape":"String", + "documentation":"A summary of the validation failure.
" + }, + "fieldList":{ + "shape":"ValidationExceptionFieldList", + "documentation":"A list of specific failures encountered while validating the input. A member can appear in this list more than once if it failed to satisfy multiple constraints.
" + } + }, + "documentation":"A standard error for input validation failures. This should be thrown by services when a member of the input structure falls outside of the modeled or documented constraints.
", + "exception":true + }, + "ValidationExceptionField":{ + "type":"structure", + "required":[ + "path", + "message" + ], + "members":{ + "path":{ + "shape":"String", + "documentation":"A JSONPointer expression to the structure member whose value failed to satisfy the modeled constraints.
" + }, + "message":{ + "shape":"String", + "documentation":"A detailed description of the validation failure.
" + } + }, + "documentation":"Describes one specific validation failure for an input member.
" + }, + "ValidationExceptionFieldList":{ + "type":"list", + "member":{"shape":"ValidationExceptionField"} + } + } +} diff --git a/tools/code-generation/protocol-tests/endpoint-rule-set.json b/tools/code-generation/protocol-tests/endpoint-rule-set.json new file mode 100644 index 00000000000..6aa4d1f1b54 --- /dev/null +++ b/tools/code-generation/protocol-tests/endpoint-rule-set.json @@ -0,0 +1,59 @@ +{ + "version": "1.3", + "parameters": { + "Region": { + "builtIn": "AWS::Region", + "required": true, + "documentation": "The AWS region used to dispatch the request.", + "type": "String" + }, + "UseDualStack": { + "builtIn": "AWS::UseDualStack", + "required": true, + "default": false, + "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.", + "type": "Boolean" + }, + "UseFIPS": { + "builtIn": "AWS::UseFIPS", + "required": true, + "default": false, + "documentation": "When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.", + "type": "Boolean" + }, + "Endpoint": { + "builtIn": "SDK::Endpoint", + "required": false, + "documentation": "Override the endpoint used to send this request", + "type": "String" + } + }, + "rules": [ + { + "conditions": [ + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": { + "ref": "Endpoint" + }, + "properties": { + "authSchemes": [ + { + "name": "sigv4", + "signingRegion": "{Region}", + "signingName": "test-service" + } + ] + }, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] +} diff --git a/tools/code-generation/protocol-tests/input/ec2.json b/tools/code-generation/protocol-tests/input/ec2.json new file mode 100644 index 00000000000..200ac6e16a9 --- /dev/null +++ b/tools/code-generation/protocol-tests/input/ec2.json @@ -0,0 +1,1218 @@ +[ + { + "description": "Test cases for EmptyInputAndEmptyOutput operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "Ec2QueryEmptyInputAndEmptyOutput", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "EmptyInputAndEmptyOutputInput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response members.
While this should be rare, code generators must support this.
" + }, + "description": "Empty input serializes no extra query params", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=EmptyInputAndEmptyOutput&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for EndpointOperation operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": {}, + "cases": [ + { + "id": "Ec2QueryEndpointTrait", + "given": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=EndpointOperation&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "host": "foo.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelOperation operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "HostLabelInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "Ec2QueryEndpointTraitWithHostLabel", + "given": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "HostLabelInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.", + "params": { + "label": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=EndpointWithHostLabelOperation&Version=2020-01-08&Label=bar", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "host": "foo.bar.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for HostWithPathOperation operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": {}, + "cases": [ + { + "id": "Ec2QueryHostWithPath", + "given": { + "name": "HostWithPathOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Custom endpoints supplied by users can have paths", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/custom/", + "body": "Action=HostWithPathOperation&Version=2020-01-08", + "host": "example.com/custom" + } + } + ], + "clientEndpoint": "https://example.com/custom" + }, + { + "description": "Test cases for NestedStructures operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "NestedStructuresInput": { + "type": "structure", + "members": { + "Nested": { + "shape": "StructArg" + } + } + }, + "StructArg": { + "type": "structure", + "members": { + "StringArg": { + "shape": "String" + }, + "OtherArg": { + "shape": "Boolean" + }, + "RecursiveArg": { + "shape": "StructArg" + } + } + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + } + }, + "cases": [ + { + "id": "Ec2NestedStructures", + "given": { + "name": "NestedStructures", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NestedStructuresInput" + }, + "documentation": "This test serializes nested and recursive structure members.
" + }, + "description": "Serializes nested structures using dots", + "params": { + "Nested": { + "StringArg": "foo", + "OtherArg": true, + "RecursiveArg": { + "StringArg": "baz" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=NestedStructures&Version=2020-01-08&Nested.StringArg=foo&Nested.OtherArg=true&Nested.RecursiveArg.StringArg=baz", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": {}, + "cases": [ + { + "id": "Ec2QueryNoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request payload or response members.
While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no payload", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=NoInputAndOutput&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for PutWithContentEncoding operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String" + }, + "data": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "SDKAppliedContentEncoding_ec2Query", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header.", + "params": { + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + }, + { + "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_ec2Query", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the ec2Query protocol.\n", + "params": { + "encoding": "custom", + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + } + ] + }, + { + "description": "Test cases for QueryIdempotencyTokenAutoFill operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "Ec2ProtocolIdempotencyTokenAutoFill", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Automatically adds idempotency token when not set", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&Token=00000000-0000-4000-8000-000000000000", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2ProtocolIdempotencyTokenAutoFillIsSet", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Uses the given idempotency token as-is", + "params": { + "token": "00000000-0000-4000-8000-000000000123" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&Token=00000000-0000-4000-8000-000000000123", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for QueryLists operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryListsInput": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + }, + "ComplexListArg": { + "shape": "GreetingList" + }, + "ListArgWithXmlNameMember": { + "shape": "ListWithXmlName" + }, + "ListArgWithXmlName": { + "shape": "ListWithXmlName", + "locationName": "Hi" + }, + "NestedWithList": { + "shape": "NestedStructWithList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "GreetingList": { + "type": "list", + "member": { + "shape": "GreetingStruct" + } + }, + "ListWithXmlName": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "NestedStructWithList": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + } + } + }, + "String": { + "type": "string" + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "Ec2Lists", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Serializes query lists. All EC2 lists are flattened.", + "params": { + "ListArg": [ + "foo", + "bar", + "baz" + ], + "ComplexListArg": [ + { + "hi": "hello" + }, + { + "hi": "hola" + } + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&ListArg.1=foo&ListArg.2=bar&ListArg.3=baz&ComplexListArg.1.Hi=hello&ComplexListArg.2.Hi=hola", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "Ec2EmptyQueryLists", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Does not serialize empty query lists.", + "params": { + "ListArg": [] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "Ec2ListArgWithXmlNameMember", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "An xmlName trait in the member of a list has no effect on the list serialization.", + "params": { + "ListArgWithXmlNameMember": [ + "A", + "B" + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&ListArgWithXmlNameMember.1=A&ListArgWithXmlNameMember.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "Ec2ListMemberWithXmlName", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Changes the name of the list using the xmlName trait", + "params": { + "ListArgWithXmlName": [ + "A", + "B" + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&Hi.1=A&Hi.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "Ec2ListNestedStructWithList", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Nested structure with a list member", + "params": { + "NestedWithList": { + "ListArg": [ + "A", + "B" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&NestedWithList.ListArg.1=A&NestedWithList.ListArg.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for QueryTimestamps operation", + "metadata": { + "protocol": "ec2", + "protocols": [ + "ec2" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryTimestampsInput": { + "type": "structure", + "members": { + "normalFormat": { + "shape": "Timestamp" + }, + "epochMember": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochTarget": { + "shape": "EpochSeconds" + } + } + }, + "Timestamp": { + "type": "timestamp" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + } + }, + "cases": [ + { + "id": "Ec2TimestampsInput", + "given": { + "name": "QueryTimestamps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryTimestampsInput" + }, + "documentation": "This test serializes timestamps.
This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes strings", + "params": { + "Foo": "val1", + "Bar": "val2" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Bar=val2", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2SimpleInputParamsStringAndBooleanTrue", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes booleans that are true", + "params": { + "Foo": "val1", + "Baz": true + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Baz=true", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2SimpleInputParamsStringsAndBooleanFalse", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes booleans that are false", + "params": { + "Baz": false + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Baz=false", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2SimpleInputParamsInteger", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes integers", + "params": { + "Bam": 10 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Bam=10", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2SimpleInputParamsFloat", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes floats", + "params": { + "Boo": 10.8 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Boo=10.8", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2SimpleInputParamsBlob", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Blobs are base64 encoded in the query string", + "params": { + "Qux": "value" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Qux=dmFsdWU%3D", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2Enums", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes enums in the query string", + "params": { + "FooEnum": "Foo" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FooEnum=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2Query", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes query using ec2QueryName trait.", + "params": { + "HasQueryName": "Hi" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&HasQueryName=Hi", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2QueryIsPreferred", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "ec2QueryName trait is preferred over xmlName.", + "params": { + "HasQueryAndXmlName": "Hi" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&HasQueryAndXmlName=Hi", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2XmlNameIsUppercased", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "xmlName is used with the ec2 protocol, but the first character is uppercased", + "params": { + "UsesXmlName": "Hi" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&UsesXmlName=Hi", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2QuerySupportsNaNFloatInputs", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Supports handling NaN float values.", + "params": { + "FloatValue": "NaN", + "Boo": "NaN" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=NaN&Boo=NaN", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2QuerySupportsInfinityFloatInputs", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Supports handling Infinity float values.", + "params": { + "FloatValue": "Infinity", + "Boo": "Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=Infinity&Boo=Infinity", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "Ec2QuerySupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Supports handling -Infinity float values.", + "params": { + "FloatValue": "-Infinity", + "Boo": "-Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=-Infinity&Boo=-Infinity", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/input/json.json b/tools/code-generation/protocol-tests/input/json.json new file mode 100644 index 00000000000..2187e52a526 --- /dev/null +++ b/tools/code-generation/protocol-tests/input/json.json @@ -0,0 +1,2366 @@ +[ + { + "description": "Test cases for EmptyOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": {}, + "cases": [ + { + "id": "sends_requests_to_slash", + "given": { + "name": "EmptyOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Sends requests to /", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.EmptyOperation" + } + } + }, + { + "id": "includes_x_amz_target_and_content_type", + "given": { + "name": "EmptyOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Includes X-Amz-Target header and Content-Type", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.EmptyOperation" + } + } + }, + { + "id": "json_1_1_client_sends_empty_payload_for_no_input_shape", + "given": { + "name": "EmptyOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Clients must always send an empty JSON object payload for\noperations with no input (that is, `{}`). While AWS service\nimplementations support requests with no payload or requests\nthat send `{}`, always sending `{}` from the client is\npreferred for forward compatibility in case input is ever\nadded to an operation.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.EmptyOperation" + } + } + } + ] + }, + { + "description": "Test cases for EndpointOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson11EndpointTrait", + "given": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.EndpointOperation" + }, + "host": "foo.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "HostLabelInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11EndpointTraitWithHostLabel", + "given": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "HostLabelInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.", + "params": { + "label": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"label\": \"bar\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.EndpointWithHostLabelOperation" + }, + "host": "foo.bar.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for HostWithPathOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson11HostWithPath", + "given": { + "name": "HostWithPathOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Custom endpoints supplied by users can have paths", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/custom/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.HostWithPathOperation" + }, + "host": "example.com/custom" + } + } + ], + "clientEndpoint": "https://example.com/custom" + }, + { + "description": "Test cases for JsonEnums operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "JsonEnumsInputOutput": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11Enums", + "given": { + "name": "JsonEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonEnumsInputOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "params": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"fooEnum1\": \"Foo\",\n \"fooEnum2\": \"0\",\n \"fooEnum3\": \"1\",\n \"fooEnumList\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumSet\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumMap\": {\n \"hi\": \"Foo\",\n \"zero\": \"0\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonEnums" + } + } + } + ] + }, + { + "description": "Test cases for JsonIntEnums operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "JsonIntEnumsInputOutput": { + "type": "structure", + "members": { + "intEnum1": { + "shape": "IntegerEnum" + }, + "intEnum2": { + "shape": "IntegerEnum" + }, + "intEnum3": { + "shape": "IntegerEnum" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "intEnumSet": { + "shape": "IntegerEnumSet" + }, + "intEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11IntEnums", + "given": { + "name": "JsonIntEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonIntEnumsInputOutput" + }, + "documentation": "This example serializes intEnums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "params": { + "intEnum1": 1, + "intEnum2": 2, + "intEnum3": 3, + "intEnumList": [ + 1, + 2 + ], + "intEnumSet": [ + 1, + 2 + ], + "intEnumMap": { + "a": 1, + "b": 2 + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"intEnum1\": 1,\n \"intEnum2\": 2,\n \"intEnum3\": 3,\n \"intEnumList\": [\n 1,\n 2\n ],\n \"intEnumSet\": [\n 1,\n 2\n ],\n \"intEnumMap\": {\n \"a\": 1,\n \"b\": 2\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonIntEnums" + } + } + } + ] + }, + { + "description": "Test cases for JsonUnions operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "UnionInputOutput": { + "type": "structure", + "members": { + "contents": { + "shape": "MyUnion" + } + }, + "documentation": "A shared structure that contains a single union member.
" + }, + "MyUnion": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "numberValue": { + "shape": "Integer" + }, + "blobValue": { + "shape": "Blob" + }, + "timestampValue": { + "shape": "Timestamp" + }, + "enumValue": { + "shape": "FooEnum" + }, + "listValue": { + "shape": "StringList" + }, + "mapValue": { + "shape": "StringMap" + }, + "structureValue": { + "shape": "GreetingStruct" + } + }, + "documentation": "A union with a representative set of types for members.
", + "union": true + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Blob": { + "type": "blob" + }, + "Timestamp": { + "type": "timestamp" + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "AwsJson11SerializeStringUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a string union value", + "params": { + "contents": { + "stringValue": "foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"stringValue\": \"foo\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeBooleanUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a boolean union value", + "params": { + "contents": { + "booleanValue": true + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"booleanValue\": true\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeNumberUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a number union value", + "params": { + "contents": { + "numberValue": 1 + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"numberValue\": 1\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeBlobUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a blob union value", + "params": { + "contents": { + "blobValue": "foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"blobValue\": \"Zm9v\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeTimestampUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a timestamp union value", + "params": { + "contents": { + "timestampValue": 1398796238 + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"timestampValue\": 1398796238\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes an enum union value", + "params": { + "contents": { + "enumValue": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"enumValue\": \"Foo\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeListUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a list union value", + "params": { + "contents": { + "listValue": [ + "foo", + "bar" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"listValue\": [\"foo\", \"bar\"]\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeMapUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a map union value", + "params": { + "contents": { + "mapValue": { + "foo": "bar", + "spam": "eggs" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"mapValue\": {\n \"foo\": \"bar\",\n \"spam\": \"eggs\"\n }\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + }, + { + "id": "AwsJson11SerializeStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a structure union value", + "params": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonUnions" + } + } + } + ] + }, + { + "description": "Test cases for KitchenSinkOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "KitchenSink": { + "type": "structure", + "members": { + "Blob": { + "shape": "Blob" + }, + "Boolean": { + "shape": "Boolean" + }, + "Double": { + "shape": "Double" + }, + "EmptyStruct": { + "shape": "EmptyStruct" + }, + "Float": { + "shape": "Float" + }, + "HttpdateTimestamp": { + "shape": "SyntheticTimestamp_http_date" + }, + "Integer": { + "shape": "Integer" + }, + "Iso8601Timestamp": { + "shape": "SyntheticTimestamp_date_time" + }, + "JsonValue": { + "shape": "JsonValue", + "jsonvalue": true + }, + "ListOfLists": { + "shape": "ListOfListOfStrings" + }, + "ListOfMapsOfStrings": { + "shape": "ListOfMapsOfStrings" + }, + "ListOfStrings": { + "shape": "ListOfStrings" + }, + "ListOfStructs": { + "shape": "ListOfStructs" + }, + "Long": { + "shape": "Long" + }, + "MapOfListsOfStrings": { + "shape": "MapOfListsOfStrings" + }, + "MapOfMaps": { + "shape": "MapOfMapOfStrings" + }, + "MapOfStrings": { + "shape": "MapOfStrings" + }, + "MapOfStructs": { + "shape": "MapOfStructs" + }, + "RecursiveList": { + "shape": "ListOfKitchenSinks" + }, + "RecursiveMap": { + "shape": "MapOfKitchenSinks" + }, + "RecursiveStruct": { + "shape": "KitchenSink" + }, + "SimpleStruct": { + "shape": "SimpleStruct" + }, + "String": { + "shape": "String" + }, + "StructWithJsonName": { + "shape": "StructWithJsonName" + }, + "Timestamp": { + "shape": "Timestamp" + }, + "UnixTimestamp": { + "shape": "SyntheticTimestamp_epoch_seconds" + } + } + }, + "Blob": { + "type": "blob" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "EmptyStruct": { + "type": "structure", + "members": {} + }, + "Float": { + "type": "float", + "box": true + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "Integer": { + "type": "integer", + "box": true + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "JsonValue": { + "type": "string" + }, + "ListOfListOfStrings": { + "type": "list", + "member": { + "shape": "ListOfStrings" + } + }, + "ListOfMapsOfStrings": { + "type": "list", + "member": { + "shape": "MapOfStrings" + } + }, + "ListOfStrings": { + "type": "list", + "member": { + "shape": "String" + } + }, + "ListOfStructs": { + "type": "list", + "member": { + "shape": "SimpleStruct" + } + }, + "Long": { + "type": "long", + "box": true + }, + "MapOfListsOfStrings": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "ListOfStrings" + } + }, + "MapOfMapOfStrings": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "MapOfStrings" + } + }, + "MapOfStrings": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "MapOfStructs": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "SimpleStruct" + } + }, + "ListOfKitchenSinks": { + "type": "list", + "member": { + "shape": "KitchenSink" + } + }, + "MapOfKitchenSinks": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "KitchenSink" + } + }, + "SimpleStruct": { + "type": "structure", + "members": { + "Value": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + }, + "StructWithJsonName": { + "type": "structure", + "members": { + "Value": { + "shape": "String" + } + } + }, + "Timestamp": { + "type": "timestamp" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + } + }, + "cases": [ + { + "id": "serializes_string_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes string shapes", + "params": { + "String": "abc xyz" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"String\":\"abc xyz\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_string_shapes_with_jsonvalue_trait", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes string shapes with jsonvalue trait", + "params": { + "JsonValue": "{\"string\":\"value\",\"number\":1234.5,\"boolTrue\":true,\"boolFalse\":false,\"array\":[1,2,3,4],\"object\":{\"key\":\"value\"},\"null\":null}" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"JsonValue\":\"{\\\"string\\\":\\\"value\\\",\\\"number\\\":1234.5,\\\"boolTrue\\\":true,\\\"boolFalse\\\":false,\\\"array\\\":[1,2,3,4],\\\"object\\\":{\\\"key\\\":\\\"value\\\"},\\\"null\\\":null}\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_integer_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes integer shapes", + "params": { + "Integer": 1234 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Integer\":1234}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_long_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes long shapes", + "params": { + "Long": 999999999999 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Long\":999999999999}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_float_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes float shapes", + "params": { + "Float": 1234.5 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Float\":1234.5}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_double_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes double shapes", + "params": { + "Double": 1234.5 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Double\":1234.5}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_blob_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes blob shapes", + "params": { + "Blob": "binary-value" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Blob\":\"YmluYXJ5LXZhbHVl\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_boolean_shapes_true", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes boolean shapes (true)", + "params": { + "Boolean": true + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Boolean\":true}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_boolean_shapes_false", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes boolean shapes (false)", + "params": { + "Boolean": false + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Boolean\":false}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_timestamp_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes timestamp shapes", + "params": { + "Timestamp": 946845296 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Timestamp\":946845296}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_timestamp_shapes_with_iso8601_timestampformat", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes timestamp shapes with iso8601 timestampFormat", + "params": { + "Iso8601Timestamp": 946845296 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Iso8601Timestamp\":\"2000-01-02T20:34:56Z\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_timestamp_shapes_with_httpdate_timestampformat", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes timestamp shapes with httpdate timestampFormat", + "params": { + "HttpdateTimestamp": 946845296 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"HttpdateTimestamp\":\"Sun, 02 Jan 2000 20:34:56 GMT\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_timestamp_shapes_with_unixtimestamp_timestampformat", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes timestamp shapes with unixTimestamp timestampFormat", + "params": { + "UnixTimestamp": 946845296 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"UnixTimestamp\":946845296}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_list_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes list shapes", + "params": { + "ListOfStrings": [ + "abc", + "mno", + "xyz" + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"ListOfStrings\":[\"abc\",\"mno\",\"xyz\"]}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_empty_list_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes empty list shapes", + "params": { + "ListOfStrings": [] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"ListOfStrings\":[]}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_list_of_map_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes list of map shapes", + "params": { + "ListOfMapsOfStrings": [ + { + "foo": "bar" + }, + { + "abc": "xyz" + }, + { + "red": "blue" + } + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"ListOfMapsOfStrings\":[{\"foo\":\"bar\"},{\"abc\":\"xyz\"},{\"red\":\"blue\"}]}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_list_of_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes list of structure shapes", + "params": { + "ListOfStructs": [ + { + "Value": "abc" + }, + { + "Value": "mno" + }, + { + "Value": "xyz" + } + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"ListOfStructs\":[{\"Value\":\"abc\"},{\"Value\":\"mno\"},{\"Value\":\"xyz\"}]}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_list_of_recursive_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes list of recursive structure shapes", + "params": { + "RecursiveList": [ + { + "RecursiveList": [ + { + "RecursiveList": [ + { + "Integer": 123 + } + ] + } + ] + } + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"RecursiveList\":[{\"RecursiveList\":[{\"RecursiveList\":[{\"Integer\":123}]}]}]}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_map_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes map shapes", + "params": { + "MapOfStrings": { + "abc": "xyz", + "mno": "hjk" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"MapOfStrings\":{\"abc\":\"xyz\",\"mno\":\"hjk\"}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_empty_map_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes empty map shapes", + "params": { + "MapOfStrings": {} + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"MapOfStrings\":{}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_map_of_list_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes map of list shapes", + "params": { + "MapOfListsOfStrings": { + "abc": [ + "abc", + "xyz" + ], + "mno": [ + "xyz", + "abc" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"MapOfListsOfStrings\":{\"abc\":[\"abc\",\"xyz\"],\"mno\":[\"xyz\",\"abc\"]}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_map_of_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes map of structure shapes", + "params": { + "MapOfStructs": { + "key1": { + "Value": "value-1" + }, + "key2": { + "Value": "value-2" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"MapOfStructs\":{\"key1\":{\"Value\":\"value-1\"},\"key2\":{\"Value\":\"value-2\"}}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_map_of_recursive_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes map of recursive structure shapes", + "params": { + "RecursiveMap": { + "key1": { + "RecursiveMap": { + "key2": { + "RecursiveMap": { + "key3": { + "Boolean": false + } + } + } + } + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"RecursiveMap\":{\"key1\":{\"RecursiveMap\":{\"key2\":{\"RecursiveMap\":{\"key3\":{\"Boolean\":false}}}}}}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes structure shapes", + "params": { + "SimpleStruct": { + "Value": "abc" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"SimpleStruct\":{\"Value\":\"abc\"}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_structure_members_with_locationname_traits", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes structure members with locationName traits", + "params": { + "StructWithJsonName": { + "Value": "some-value" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"StructWithJsonName\":{\"Value\":\"some-value\"}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_empty_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes empty structure shapes", + "params": { + "SimpleStruct": {} + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"SimpleStruct\":{}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_structure_which_have_no_members", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes structure which have no members", + "params": { + "EmptyStruct": {} + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"EmptyStruct\":{}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "serializes_recursive_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "KitchenSink" + } + }, + "description": "Serializes recursive structure shapes", + "params": { + "String": "top-value", + "Boolean": false, + "RecursiveStruct": { + "String": "nested-value", + "Boolean": true, + "RecursiveList": [ + { + "String": "string-only" + }, + { + "RecursiveStruct": { + "MapOfStrings": { + "color": "red", + "size": "large" + } + } + } + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"String\":\"top-value\",\"Boolean\":false,\"RecursiveStruct\":{\"String\":\"nested-value\",\"Boolean\":true,\"RecursiveList\":[{\"String\":\"string-only\"},{\"RecursiveStruct\":{\"MapOfStrings\":{\"color\":\"red\",\"size\":\"large\"}}}]}}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.KitchenSinkOperation" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for NullOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "NullOperationInputOutput": { + "type": "structure", + "members": { + "string": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11StructuresDontSerializeNullValues", + "given": { + "name": "NullOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NullOperationInputOutput" + } + }, + "description": "Null structure values are dropped", + "params": { + "string": null + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.NullOperation" + } + } + } + ] + }, + { + "description": "Test cases for OperationWithOptionalInputOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "OperationWithOptionalInputOutputInput": { + "type": "structure", + "members": { + "Value": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "can_call_operation_with_no_input_or_output", + "given": { + "name": "OperationWithOptionalInputOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "OperationWithOptionalInputOutputInput" + } + }, + "description": "Can call operations with no input or output", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.OperationWithOptionalInputOutput" + } + } + }, + { + "id": "can_call_operation_with_optional_input", + "given": { + "name": "OperationWithOptionalInputOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "OperationWithOptionalInputOutputInput" + } + }, + "description": "Can invoke operations with optional input", + "params": { + "Value": "Hi" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"Value\":\"Hi\"}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.OperationWithOptionalInputOutput" + } + } + } + ] + }, + { + "description": "Test cases for PutAndGetInlineDocuments operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "PutAndGetInlineDocumentsInputOutput": { + "type": "structure", + "members": { + "inlineDocument": { + "shape": "Document" + } + } + }, + "Document": { + "type": "structure", + "members": {}, + "document": true + } + }, + "cases": [ + { + "id": "PutAndGetInlineDocumentsInput", + "given": { + "name": "PutAndGetInlineDocuments", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutAndGetInlineDocumentsInputOutput" + }, + "documentation": "This example serializes an inline document as part of the payload.
" + }, + "description": "Serializes inline documents in a JSON request.", + "params": { + "inlineDocument": { + "foo": "bar" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"inlineDocument\": {\"foo\": \"bar\"}\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.PutAndGetInlineDocuments" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for PutWithContentEncoding operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String" + }, + "data": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "SDKAppliedContentEncoding_awsJson1_1", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header.", + "params": { + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + }, + { + "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_awsJson1_1", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the awsJson1_1 protocol.\n", + "params": { + "encoding": "custom", + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + } + ] + }, + { + "description": "Test cases for SimpleScalarProperties operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "SimpleScalarPropertiesInputOutput": { + "type": "structure", + "members": { + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double" + } + } + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "AwsJson11SupportsNaNFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + } + }, + "description": "Supports handling NaN float values.", + "params": { + "floatValue": "NaN", + "doubleValue": "NaN" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"floatValue\": \"NaN\",\n \"doubleValue\": \"NaN\"\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.SimpleScalarProperties" + } + } + }, + { + "id": "AwsJson11SupportsInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + } + }, + "description": "Supports handling Infinity float values.", + "params": { + "floatValue": "Infinity", + "doubleValue": "Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"floatValue\": \"Infinity\",\n \"doubleValue\": \"Infinity\"\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.SimpleScalarProperties" + } + } + }, + { + "id": "AwsJson11SupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + } + }, + "description": "Supports handling -Infinity float values.", + "params": { + "floatValue": "-Infinity", + "doubleValue": "-Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"floatValue\": \"-Infinity\",\n \"doubleValue\": \"-Infinity\"\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.SimpleScalarProperties" + } + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/input/json_1_0.json b/tools/code-generation/protocol-tests/input/json_1_0.json new file mode 100644 index 00000000000..f746c223618 --- /dev/null +++ b/tools/code-generation/protocol-tests/input/json_1_0.json @@ -0,0 +1,878 @@ +[ + { + "description": "Test cases for EmptyInputAndEmptyOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "AwsJson10EmptyInputAndEmptyOutput", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "EmptyInputAndEmptyOutputInput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "Clients must always send an empty object if input is modeled.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.EmptyInputAndEmptyOutput" + } + } + } + ] + }, + { + "description": "Test cases for EndpointOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson10EndpointTrait", + "given": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "host": "foo.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "EndpointWithHostLabelOperationInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson10EndpointTraitWithHostLabel", + "given": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "EndpointWithHostLabelOperationInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.", + "params": { + "label": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\"label\": \"bar\"}", + "host": "foo.bar.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for HostWithPathOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson10HostWithPath", + "given": { + "name": "HostWithPathOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Custom endpoints supplied by users can have paths", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/custom/", + "body": "{}", + "host": "example.com/custom" + } + } + ], + "clientEndpoint": "https://example.com/custom" + }, + { + "description": "Test cases for JsonUnions operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "JsonUnionsInput": { + "type": "structure", + "members": { + "contents": { + "shape": "MyUnion" + } + } + }, + "MyUnion": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "numberValue": { + "shape": "Integer" + }, + "blobValue": { + "shape": "Blob" + }, + "timestampValue": { + "shape": "Timestamp" + }, + "enumValue": { + "shape": "FooEnum" + }, + "intEnumValue": { + "shape": "IntegerEnum" + }, + "listValue": { + "shape": "StringList" + }, + "mapValue": { + "shape": "StringMap" + }, + "structureValue": { + "shape": "GreetingStruct" + } + }, + "documentation": "A union with a representative set of types for members.
", + "union": true + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Blob": { + "type": "blob" + }, + "Timestamp": { + "type": "timestamp" + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "AwsJson10SerializeStringUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a string union value", + "params": { + "contents": { + "stringValue": "foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"stringValue\": \"foo\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeBooleanUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a boolean union value", + "params": { + "contents": { + "booleanValue": true + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"booleanValue\": true\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeNumberUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a number union value", + "params": { + "contents": { + "numberValue": 1 + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"numberValue\": 1\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeBlobUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a blob union value", + "params": { + "contents": { + "blobValue": "foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"blobValue\": \"Zm9v\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeTimestampUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a timestamp union value", + "params": { + "contents": { + "timestampValue": 1398796238 + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"timestampValue\": 1398796238\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes an enum union value", + "params": { + "contents": { + "enumValue": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"enumValue\": \"Foo\"\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeIntEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes an intEnum union value", + "params": { + "contents": { + "intEnumValue": 1 + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"intEnumValue\": 1\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeListUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a list union value", + "params": { + "contents": { + "listValue": [ + "foo", + "bar" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"listValue\": [\"foo\", \"bar\"]\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeMapUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a map union value", + "params": { + "contents": { + "mapValue": { + "foo": "bar", + "spam": "eggs" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"mapValue\": {\n \"foo\": \"bar\",\n \"spam\": \"eggs\"\n }\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + }, + { + "id": "AwsJson10SerializeStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "JsonUnionsInput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a structure union value", + "params": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"contents\": {\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.JsonUnions" + } + } + } + ] + }, + { + "description": "Test cases for NoInputAndNoOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson10MustAlwaysSendEmptyJsonPayload", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "Clients must always send an empty JSON object payload for\noperations with no input (that is, `{}`). While AWS service\nimplementations support requests with no payload or requests\nthat send `{}`, always sending `{}` from the client is\npreferred for forward compatibility in case input is ever\nadded to an operation.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.NoInputAndNoOutput" + } + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson10NoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "A client should always send and empty JSON object payload.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.NoInputAndOutput" + } + } + } + ] + }, + { + "description": "Test cases for PutWithContentEncoding operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String" + }, + "data": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "SDKAppliedContentEncoding_awsJson1_0", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header.", + "params": { + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + }, + { + "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_awsJson1_0", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the awsJson1_0 protocol.\n", + "params": { + "encoding": "custom", + "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + } + ] + }, + { + "description": "Test cases for SimpleScalarProperties operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "SimpleScalarPropertiesInput": { + "type": "structure", + "members": { + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double" + } + } + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "AwsJson10SupportsNaNFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleScalarPropertiesInput" + } + }, + "description": "Supports handling NaN float values.", + "params": { + "floatValue": "NaN", + "doubleValue": "NaN" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"floatValue\": \"NaN\",\n \"doubleValue\": \"NaN\"\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.SimpleScalarProperties" + } + } + }, + { + "id": "AwsJson10SupportsInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleScalarPropertiesInput" + } + }, + "description": "Supports handling Infinity float values.", + "params": { + "floatValue": "Infinity", + "doubleValue": "Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"floatValue\": \"Infinity\",\n \"doubleValue\": \"Infinity\"\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.SimpleScalarProperties" + } + } + }, + { + "id": "AwsJson10SupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleScalarPropertiesInput" + } + }, + "description": "Supports handling -Infinity float values.", + "params": { + "floatValue": "-Infinity", + "doubleValue": "-Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "{\n \"floatValue\": \"-Infinity\",\n \"doubleValue\": \"-Infinity\"\n}", + "headers": { + "Content-Type": "application/x-amz-json-1.0", + "X-Amz-Target": "JsonRpc10.SimpleScalarProperties" + } + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/input/query.json b/tools/code-generation/protocol-tests/input/query.json new file mode 100644 index 00000000000..58435cca0c8 --- /dev/null +++ b/tools/code-generation/protocol-tests/input/query.json @@ -0,0 +1,1611 @@ +[ + { + "description": "Test cases for EmptyInputAndEmptyOutput operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "QueryEmptyInputAndEmptyOutput", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "EmptyInputAndEmptyOutputInput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response members.
While this should be rare, code generators must support this.
" + }, + "description": "Empty input serializes no extra query params", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=EmptyInputAndEmptyOutput&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for EndpointOperation operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsQueryEndpointTrait", + "given": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=EndpointOperation&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "host": "foo.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelOperation operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "HostLabelInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsQueryEndpointTraitWithHostLabel", + "given": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "HostLabelInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.", + "params": { + "label": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=EndpointWithHostLabelOperation&Version=2020-01-08&label=bar", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "host": "foo.bar.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for HostWithPathOperation operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": {}, + "cases": [ + { + "id": "QueryHostWithPath", + "given": { + "name": "HostWithPathOperation", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Custom endpoints supplied by users can have paths", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/custom/", + "body": "Action=HostWithPathOperation&Version=2020-01-08", + "host": "example.com/custom" + } + } + ], + "clientEndpoint": "https://example.com/custom" + }, + { + "description": "Test cases for NestedStructures operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "NestedStructuresInput": { + "type": "structure", + "members": { + "Nested": { + "shape": "StructArg" + } + } + }, + "StructArg": { + "type": "structure", + "members": { + "StringArg": { + "shape": "String" + }, + "OtherArg": { + "shape": "Boolean" + }, + "RecursiveArg": { + "shape": "StructArg" + } + } + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + } + }, + "cases": [ + { + "id": "NestedStructures", + "given": { + "name": "NestedStructures", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NestedStructuresInput" + }, + "documentation": "This test serializes nested and recursive structure members.
" + }, + "description": "Serializes nested structures using dots", + "params": { + "Nested": { + "StringArg": "foo", + "OtherArg": true, + "RecursiveArg": { + "StringArg": "baz" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=NestedStructures&Version=2020-01-08&Nested.StringArg=foo&Nested.OtherArg=true&Nested.RecursiveArg.StringArg=baz", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for NoInputAndNoOutput operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": {}, + "cases": [ + { + "id": "QueryNoInputAndNoOutput", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output.
While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no additional query params", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=NoInputAndNoOutput&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "NoInputAndOutputInput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "QueryNoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "NoInputAndOutputInput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request payload or response members.
While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no payload", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=NoInputAndOutput&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for PutWithContentEncoding operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String" + }, + "data": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "SDKAppliedContentEncoding_awsQuery", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header.", + "params": { + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + }, + { + "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_awsQuery", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the awsQuery protocol.\n", + "params": { + "encoding": "custom", + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/", + "headers": { + "Content-Encoding": "gzip" + } + } + } + ] + }, + { + "description": "Test cases for QueryIdempotencyTokenAutoFill operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "QueryProtocolIdempotencyTokenAutoFill", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Automatically adds idempotency token when not set", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&token=00000000-0000-4000-8000-000000000000", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QueryProtocolIdempotencyTokenAutoFillIsSet", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Uses the given idempotency token as-is", + "params": { + "token": "00000000-0000-4000-8000-000000000123" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&token=00000000-0000-4000-8000-000000000123", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for QueryLists operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryListsInput": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + }, + "ComplexListArg": { + "shape": "GreetingList" + }, + "FlattenedListArg": { + "shape": "StringList", + "flattened": true + }, + "ListArgWithXmlNameMember": { + "shape": "ListWithXmlName" + }, + "FlattenedListArgWithXmlName": { + "shape": "ListWithXmlName", + "flattened": true, + "locationName": "Hi" + }, + "NestedWithList": { + "shape": "NestedStructWithList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "GreetingList": { + "type": "list", + "member": { + "shape": "GreetingStruct" + } + }, + "ListWithXmlName": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "NestedStructWithList": { + "type": "structure", + "members": { + "ListArg": { + "shape": "StringList" + } + } + }, + "String": { + "type": "string" + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "QueryLists", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Serializes query lists", + "params": { + "ListArg": [ + "foo", + "bar", + "baz" + ], + "ComplexListArg": [ + { + "hi": "hello" + }, + { + "hi": "hola" + } + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&ListArg.member.1=foo&ListArg.member.2=bar&ListArg.member.3=baz&ComplexListArg.member.1.hi=hello&ComplexListArg.member.2.hi=hola", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "EmptyQueryLists", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Serializes empty query lists", + "params": { + "ListArg": [] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&ListArg=", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "FlattenedQueryLists", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Flattens query lists by repeating the member name and removing the member element", + "params": { + "FlattenedListArg": [ + "A", + "B" + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&FlattenedListArg.1=A&FlattenedListArg.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryListArgWithXmlNameMember", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Changes the member of lists using xmlName trait", + "params": { + "ListArgWithXmlNameMember": [ + "A", + "B" + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&ListArgWithXmlNameMember.item.1=A&ListArgWithXmlNameMember.item.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryFlattenedListArgWithXmlName", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Changes the name of flattened lists using xmlName trait on the structure member", + "params": { + "FlattenedListArgWithXmlName": [ + "A", + "B" + ] + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&Hi.1=A&Hi.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryNestedStructWithList", + "given": { + "name": "QueryLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryListsInput" + }, + "documentation": "This test serializes simple and complex lists.
" + }, + "description": "Nested structure with a list member", + "params": { + "NestedWithList": { + "ListArg": [ + "A", + "B" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryLists&Version=2020-01-08&NestedWithList.ListArg.member.1=A&NestedWithList.ListArg.member.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for QueryMaps operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryMapsInput": { + "type": "structure", + "members": { + "MapArg": { + "shape": "StringMap" + }, + "RenamedMapArg": { + "shape": "StringMap", + "locationName": "Foo" + }, + "ComplexMapArg": { + "shape": "ComplexMap" + }, + "MapWithXmlMemberName": { + "shape": "MapWithXmlName" + }, + "FlattenedMap": { + "shape": "StringMap", + "flattened": true + }, + "FlattenedMapWithXmlName": { + "shape": "MapWithXmlName", + "flattened": true, + "locationName": "Hi" + }, + "MapOfLists": { + "shape": "MapOfLists" + }, + "NestedStructWithMap": { + "shape": "NestedStructWithMap" + } + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "ComplexMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "GreetingStruct" + } + }, + "MapWithXmlName": { + "type": "map", + "key": { + "shape": "String", + "locationName": "K" + }, + "value": { + "shape": "String", + "locationName": "V" + } + }, + "MapOfLists": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringList" + } + }, + "NestedStructWithMap": { + "type": "structure", + "members": { + "MapArg": { + "shape": "StringMap" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "QuerySimpleQueryMaps", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes query maps", + "params": { + "MapArg": { + "bar": "Bar", + "foo": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&MapArg.entry.1.key=bar&MapArg.entry.1.value=Bar&MapArg.entry.2.key=foo&MapArg.entry.2.value=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QuerySimpleQueryMapsWithXmlName", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes query maps and uses xmlName", + "params": { + "RenamedMapArg": { + "foo": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&Foo.entry.1.key=foo&Foo.entry.1.value=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryComplexQueryMaps", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes complex query maps", + "params": { + "ComplexMapArg": { + "bar": { + "hi": "Bar" + }, + "foo": { + "hi": "Foo" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&ComplexMapArg.entry.1.key=bar&ComplexMapArg.entry.1.value.hi=Bar&ComplexMapArg.entry.2.key=foo&ComplexMapArg.entry.2.value.hi=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryEmptyQueryMaps", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Does not serialize empty query maps", + "params": { + "MapArg": {} + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryQueryMapWithMemberXmlName", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes query maps where the member has an xmlName trait", + "params": { + "MapWithXmlMemberName": { + "bar": "Bar", + "foo": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&MapWithXmlMemberName.entry.1.K=bar&MapWithXmlMemberName.entry.1.V=Bar&MapWithXmlMemberName.entry.2.K=foo&MapWithXmlMemberName.entry.2.V=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryFlattenedQueryMaps", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes flattened query maps", + "params": { + "FlattenedMap": { + "bar": "Bar", + "foo": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&FlattenedMap.1.key=bar&FlattenedMap.1.value=Bar&FlattenedMap.2.key=foo&FlattenedMap.2.value=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryFlattenedQueryMapsWithXmlName", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes flattened query maps that use an xmlName", + "params": { + "FlattenedMapWithXmlName": { + "bar": "Bar", + "foo": "Foo" + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&Hi.1.K=bar&Hi.1.V=Bar&Hi.2.K=foo&Hi.2.V=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryQueryMapOfLists", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes query map of lists", + "params": { + "MapOfLists": { + "bar": [ + "C", + "D" + ], + "foo": [ + "A", + "B" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&MapOfLists.entry.1.key=bar&MapOfLists.entry.1.value.member.1=C&MapOfLists.entry.1.value.member.2=D&MapOfLists.entry.2.key=foo&MapOfLists.entry.2.value.member.1=A&MapOfLists.entry.2.value.member.2=B", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + }, + { + "id": "QueryNestedStructWithMap", + "given": { + "name": "QueryMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryMapsInput" + }, + "documentation": "This test serializes simple and complex maps.
" + }, + "description": "Serializes nested struct with map member", + "params": { + "NestedStructWithMap": { + "MapArg": { + "bar": "Bar", + "foo": "Foo" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=QueryMaps&Version=2020-01-08&NestedStructWithMap.MapArg.entry.1.key=bar&NestedStructWithMap.MapArg.entry.1.value=Bar&NestedStructWithMap.MapArg.entry.2.key=foo&NestedStructWithMap.MapArg.entry.2.value=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } + } + } + ] + }, + { + "description": "Test cases for QueryTimestamps operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "QueryTimestampsInput": { + "type": "structure", + "members": { + "normalFormat": { + "shape": "Timestamp" + }, + "epochMember": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochTarget": { + "shape": "EpochSeconds" + } + } + }, + "Timestamp": { + "type": "timestamp" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + } + }, + "cases": [ + { + "id": "QueryTimestampsInput", + "given": { + "name": "QueryTimestamps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "QueryTimestampsInput" + }, + "documentation": "This test serializes timestamps.
This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes strings", + "params": { + "Foo": "val1", + "Bar": "val2" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Bar=val2", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QuerySimpleInputParamsStringAndBooleanTrue", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes booleans that are true", + "params": { + "Foo": "val1", + "Baz": true + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Baz=true", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QuerySimpleInputParamsStringsAndBooleanFalse", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes booleans that are false", + "params": { + "Baz": false + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Baz=false", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QuerySimpleInputParamsInteger", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes integers", + "params": { + "Bam": 10 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Bam=10", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QuerySimpleInputParamsFloat", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes floats", + "params": { + "Boo": 10.8 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Boo=10.8", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QuerySimpleInputParamsBlob", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Blobs are base64 encoded in the query string", + "params": { + "Qux": "value" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&Qux=dmFsdWU%3D", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QueryEnums", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes enums in the query string", + "params": { + "FooEnum": "Foo" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FooEnum=Foo", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "QueryIntEnums", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Serializes intEnums in the query string", + "params": { + "IntegerEnum": 1 + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&IntegerEnum=1", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "AwsQuerySupportsNaNFloatInputs", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Supports handling NaN float values.", + "params": { + "FloatValue": "NaN", + "Boo": "NaN" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=NaN&Boo=NaN", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "AwsQuerySupportsInfinityFloatInputs", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Supports handling Infinity float values.", + "params": { + "FloatValue": "Infinity", + "Boo": "Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=Infinity&Boo=Infinity", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "AwsQuerySupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleInputParams", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "SimpleInputParamsInput" + }, + "documentation": "This test serializes strings, numbers, and boolean values.
" + }, + "description": "Supports handling -Infinity float values.", + "params": { + "FloatValue": "-Infinity", + "Boo": "-Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/", + "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=-Infinity&Boo=-Infinity", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/input/rest-json.json b/tools/code-generation/protocol-tests/input/rest-json.json new file mode 100644 index 00000000000..bc73a3d7adc --- /dev/null +++ b/tools/code-generation/protocol-tests/input/rest-json.json @@ -0,0 +1,6117 @@ +[ + { + "description": "Test cases for AllQueryStringTypes operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "AllQueryStringTypesInput": { + "type": "structure", + "members": { + "queryString": { + "shape": "String", + "location": "querystring", + "locationName": "String" + }, + "queryStringList": { + "shape": "StringList", + "location": "querystring", + "locationName": "StringList" + }, + "queryStringSet": { + "shape": "StringSet", + "location": "querystring", + "locationName": "StringSet" + }, + "queryByte": { + "shape": "Integer", + "location": "querystring", + "locationName": "Byte" + }, + "queryShort": { + "shape": "Integer", + "location": "querystring", + "locationName": "Short" + }, + "queryInteger": { + "shape": "Integer", + "location": "querystring", + "locationName": "Integer" + }, + "queryIntegerList": { + "shape": "IntegerList", + "location": "querystring", + "locationName": "IntegerList" + }, + "queryIntegerSet": { + "shape": "IntegerSet", + "location": "querystring", + "locationName": "IntegerSet" + }, + "queryLong": { + "shape": "Long", + "location": "querystring", + "locationName": "Long" + }, + "queryFloat": { + "shape": "Float", + "location": "querystring", + "locationName": "Float" + }, + "queryDouble": { + "shape": "Double", + "location": "querystring", + "locationName": "Double" + }, + "queryDoubleList": { + "shape": "DoubleList", + "location": "querystring", + "locationName": "DoubleList" + }, + "queryBoolean": { + "shape": "Boolean", + "location": "querystring", + "locationName": "Boolean" + }, + "queryBooleanList": { + "shape": "BooleanList", + "location": "querystring", + "locationName": "BooleanList" + }, + "queryTimestamp": { + "shape": "Timestamp", + "location": "querystring", + "locationName": "Timestamp" + }, + "queryTimestampList": { + "shape": "TimestampList", + "location": "querystring", + "locationName": "TimestampList" + }, + "queryEnum": { + "shape": "FooEnum", + "location": "querystring", + "locationName": "Enum" + }, + "queryEnumList": { + "shape": "FooEnumList", + "location": "querystring", + "locationName": "EnumList" + }, + "queryIntegerEnum": { + "shape": "IntegerEnum", + "location": "querystring", + "locationName": "IntegerEnum" + }, + "queryIntegerEnumList": { + "shape": "IntegerEnumList", + "location": "querystring", + "locationName": "IntegerEnumList" + }, + "queryParamsMapOfStringList": { + "shape": "StringListMap", + "location": "querystring" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "Integer": { + "type": "integer", + "box": true + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "IntegerSet": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "DoubleList": { + "type": "list", + "member": { + "shape": "Double" + } + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "Timestamp": { + "type": "timestamp" + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "StringListMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringList" + } + } + }, + "cases": [ + { + "id": "RestJsonAllQueryStringTypes", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Serializes query string parameters with all supported types", + "params": { + "queryString": "Hello there", + "queryStringList": [ + "a", + "b", + "c" + ], + "queryStringSet": [ + "a", + "b", + "c" + ], + "queryByte": 1, + "queryShort": 2, + "queryInteger": 3, + "queryIntegerList": [ + 1, + 2, + 3 + ], + "queryIntegerSet": [ + 1, + 2, + 3 + ], + "queryLong": 4, + "queryFloat": 1.1, + "queryDouble": 1.1, + "queryDoubleList": [ + 1.1, + 2.1, + 3.1 + ], + "queryBoolean": true, + "queryBooleanList": [ + true, + false, + true + ], + "queryTimestamp": 1, + "queryTimestampList": [ + 1, + 2, + 3 + ], + "queryEnum": "Foo", + "queryEnumList": [ + "Foo", + "Baz", + "Bar" + ], + "queryIntegerEnum": 1, + "queryIntegerEnumList": [ + 1, + 2, + 3 + ], + "queryParamsMapOfStringList": { + "String": [ + "Hello there" + ], + "StringList": [ + "a", + "b", + "c" + ], + "StringSet": [ + "a", + "b", + "c" + ], + "Byte": [ + "1" + ], + "Short": [ + "2" + ], + "Integer": [ + "3" + ], + "IntegerList": [ + "1", + "2", + "3" + ], + "IntegerSet": [ + "1", + "2", + "3" + ], + "Long": [ + "4" + ], + "Float": [ + "1.1" + ], + "Double": [ + "1.1" + ], + "DoubleList": [ + "1.1", + "2.1", + "3.1" + ], + "Boolean": [ + "true" + ], + "BooleanList": [ + "true", + "false", + "true" + ], + "Timestamp": [ + "1970-01-01T00:00:01Z" + ], + "TimestampList": [ + "1970-01-01T00:00:01Z", + "1970-01-01T00:00:02Z", + "1970-01-01T00:00:03Z" + ], + "Enum": [ + "Foo" + ], + "EnumList": [ + "Foo", + "Baz", + "Bar" + ], + "IntegerEnum": [ + "1" + ], + "IntegerEnumList": [ + "1", + "2", + "3" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?String=Hello%20there&StringList=a&StringList=b&StringList=c&StringSet=a&StringSet=b&StringSet=c&Byte=1&Short=2&Integer=3&IntegerList=1&IntegerList=2&IntegerList=3&IntegerSet=1&IntegerSet=2&IntegerSet=3&Long=4&Float=1.1&Double=1.1&DoubleList=1.1&DoubleList=2.1&DoubleList=3.1&Boolean=true&BooleanList=true&BooleanList=false&BooleanList=true&Timestamp=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A02Z&TimestampList=1970-01-01T00%3A00%3A03Z&Enum=Foo&EnumList=Foo&EnumList=Baz&EnumList=Bar&IntegerEnum=1&IntegerEnumList=1&IntegerEnumList=2&IntegerEnumList=3", + "body": "" + } + }, + { + "id": "RestJsonQueryStringMap", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Handles query string maps", + "params": { + "queryParamsMapOfStringList": { + "QueryParamsStringKeyA": [ + "Foo" + ], + "QueryParamsStringKeyB": [ + "Bar" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?QueryParamsStringKeyA=Foo&QueryParamsStringKeyB=Bar", + "body": "" + } + }, + { + "id": "RestJsonQueryStringEscaping", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Handles escaping all required characters in the query string.", + "params": { + "queryString": " %:/?#[]@!$&'()*+,;=😹", + "queryParamsMapOfStringList": { + "String": [ + " %:/?#[]@!$&'()*+,;=😹" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?String=%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9", + "body": "" + } + }, + { + "id": "RestJsonSupportsNaNFloatQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Supports handling NaN float query values.", + "params": { + "queryFloat": "NaN", + "queryDouble": "NaN", + "queryParamsMapOfStringList": { + "Float": [ + "NaN" + ], + "Double": [ + "NaN" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Float=NaN&Double=NaN", + "body": "" + } + }, + { + "id": "RestJsonSupportsInfinityFloatQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Supports handling Infinity float query values.", + "params": { + "queryFloat": "Infinity", + "queryDouble": "Infinity", + "queryParamsMapOfStringList": { + "Float": [ + "Infinity" + ], + "Double": [ + "Infinity" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Float=Infinity&Double=Infinity", + "body": "" + } + }, + { + "id": "RestJsonSupportsNegativeInfinityFloatQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Supports handling -Infinity float query values.", + "params": { + "queryFloat": "-Infinity", + "queryDouble": "-Infinity", + "queryParamsMapOfStringList": { + "Float": [ + "-Infinity" + ], + "Double": [ + "-Infinity" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Float=-Infinity&Double=-Infinity", + "body": "" + } + }, + { + "id": "RestJsonZeroAndFalseQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Query values of 0 and false are serialized", + "params": { + "queryInteger": 0, + "queryBoolean": false, + "queryParamsMapOfStringList": { + "Integer": [ + "0" + ], + "Boolean": [ + "false" + ] + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Integer=0&Boolean=false", + "body": "" + } + } + ] + }, + { + "description": "Test cases for ConstantAndVariableQueryString operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "ConstantAndVariableQueryStringInput": { + "type": "structure", + "members": { + "baz": { + "shape": "String", + "location": "querystring", + "locationName": "baz" + }, + "maybeSet": { + "shape": "String", + "location": "querystring", + "locationName": "maybeSet" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonConstantAndVariableQueryStringMissingOneValue", + "given": { + "name": "ConstantAndVariableQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantAndVariableQueryString?foo=bar", + "responseCode": 200 + }, + "input": { + "shape": "ConstantAndVariableQueryStringInput" + }, + "documentation": "This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).
" + }, + "description": "Mixes constant and variable query string parameters", + "params": { + "baz": "bam" + }, + "serialized": { + "method": "GET", + "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam", + "body": "" + } + }, + { + "id": "RestJsonConstantAndVariableQueryStringAllValues", + "given": { + "name": "ConstantAndVariableQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantAndVariableQueryString?foo=bar", + "responseCode": 200 + }, + "input": { + "shape": "ConstantAndVariableQueryStringInput" + }, + "documentation": "This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).
" + }, + "description": "Mixes constant and variable query string parameters", + "params": { + "baz": "bam", + "maybeSet": "yes" + }, + "serialized": { + "method": "GET", + "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam&maybeSet=yes", + "body": "" + } + } + ] + }, + { + "description": "Test cases for ConstantQueryString operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "ConstantQueryStringInput": { + "type": "structure", + "required": [ + "hello" + ], + "members": { + "hello": { + "shape": "String", + "location": "uri", + "locationName": "hello" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonConstantQueryString", + "given": { + "name": "ConstantQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantQueryString/{hello}?foo=bar&hello", + "responseCode": 200 + }, + "input": { + "shape": "ConstantQueryStringInput" + }, + "documentation": "This example uses a constant query string parameters and a label. This simply tests that labels and query string parameters are compatible. The fixed query string parameter named "hello" should in no way conflict with the label, {hello}
.
This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Serializes document types as part of the JSON request payload with no escaping.", + "params": { + "stringValue": "string", + "documentValue": { + "foo": "bar" + } + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentType", + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": {\n \"foo\": \"bar\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "DocumentInputWithString", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Serializes document types using a string.", + "params": { + "stringValue": "string", + "documentValue": "hello" + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentType", + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": \"hello\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "DocumentInputWithNumber", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Serializes document types using a number.", + "params": { + "stringValue": "string", + "documentValue": 10 + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentType", + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": 10\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "DocumentInputWithBoolean", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Serializes document types using a boolean.", + "params": { + "stringValue": "string", + "documentValue": true + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentType", + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": true\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "DocumentInputWithList", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Serializes document types using a list.", + "params": { + "stringValue": "string", + "documentValue": [ + true, + "hi", + [ + 1, + 2 + ], + { + "foo": { + "baz": [ + 3, + 4 + ] + } + } + ] + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentType", + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": [\n true,\n \"hi\",\n [\n 1,\n 2\n ],\n {\n \"foo\": {\n \"baz\": [\n 3,\n 4\n ]\n }\n }\n ]\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for DocumentTypeAsMapValue operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "DocumentTypeAsMapValueInputOutput": { + "type": "structure", + "members": { + "docValuedMap": { + "shape": "DocumentValuedMap" + } + } + }, + "DocumentValuedMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "Document" + } + }, + "Document": { + "type": "structure", + "members": {}, + "document": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "DocumentTypeAsMapValueInput", + "given": { + "name": "DocumentTypeAsMapValue", + "http": { + "method": "PUT", + "requestUri": "/DocumentTypeAsMapValue", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeAsMapValueInputOutput" + }, + "documentation": "This example serializes documents as the value of maps.
", + "idempotent": true + }, + "description": "Serializes a map that uses documents as the value.", + "params": { + "docValuedMap": { + "foo": { + "f": 1, + "o": 2 + }, + "bar": [ + "b", + "a", + "r" + ], + "baz": "BAZ" + } + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentTypeAsMapValue", + "body": "{\n \"docValuedMap\": {\n \"foo\": { \"f\": 1, \"o\": 2 },\n \"bar\": [ \"b\", \"a\", \"r\" ],\n \"baz\": \"BAZ\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for DocumentTypeAsPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "DocumentTypeAsPayloadInputOutput": { + "type": "structure", + "members": { + "documentValue": { + "shape": "Document" + } + }, + "payload": "documentValue" + }, + "Document": { + "type": "structure", + "members": {}, + "document": true + } + }, + "cases": [ + { + "id": "DocumentTypeAsPayloadInput", + "given": { + "name": "DocumentTypeAsPayload", + "http": { + "method": "PUT", + "requestUri": "/DocumentTypeAsPayload", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeAsPayloadInputOutput" + }, + "documentation": "This example serializes a document as the entire HTTP payload.
", + "idempotent": true + }, + "description": "Serializes a document as the target of the httpPayload trait.", + "params": { + "documentValue": { + "foo": "bar" + } + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentTypeAsPayload", + "body": "{\n \"foo\": \"bar\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "DocumentTypeAsPayloadInputString", + "given": { + "name": "DocumentTypeAsPayload", + "http": { + "method": "PUT", + "requestUri": "/DocumentTypeAsPayload", + "responseCode": 200 + }, + "input": { + "shape": "DocumentTypeAsPayloadInputOutput" + }, + "documentation": "This example serializes a document as the entire HTTP payload.
", + "idempotent": true + }, + "description": "Serializes a document as the target of the httpPayload trait using a string.", + "params": { + "documentValue": "hello" + }, + "serialized": { + "method": "PUT", + "uri": "/DocumentTypeAsPayload", + "body": "\"hello\"", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for EmptyInputAndEmptyOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "EmptyInputAndEmptyOutputInput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "RestJsonEmptyInputAndEmptyOutput", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/EmptyInputAndEmptyOutput", + "responseCode": 200 + }, + "input": { + "shape": "EmptyInputAndEmptyOutputInput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "Clients should not serialize a JSON payload when no parameters\nare given that are sent in the body. A service will tolerate\nclients that omit a payload or that send a JSON object.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/EmptyInputAndEmptyOutput", + "body": "" + } + } + ] + }, + { + "description": "Test cases for EndpointOperation operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonEndpointTrait", + "given": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointOperation", + "responseCode": 200 + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/EndpointOperation", + "body": "", + "host": "foo.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelOperation operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HostLabelInput": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonEndpointTraitWithHostLabel", + "given": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointWithHostLabelOperation", + "responseCode": 200 + }, + "input": { + "shape": "HostLabelInput" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.", + "params": { + "label": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/EndpointWithHostLabelOperation", + "body": "{\"label\": \"bar\"}", + "host": "foo.bar.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for HostWithPathOperation operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonHostWithPath", + "given": { + "name": "HostWithPathOperation", + "http": { + "method": "GET", + "requestUri": "/HostWithPathOperation", + "responseCode": 200 + } + }, + "description": "Custom endpoints supplied by users can have paths", + "params": {}, + "serialized": { + "method": "GET", + "uri": "/custom/HostWithPathOperation", + "body": "", + "host": "example.com/custom" + } + } + ], + "clientEndpoint": "https://example.com/custom" + }, + { + "description": "Test cases for HttpChecksumRequired operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpChecksumRequiredInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpChecksumRequired", + "given": { + "name": "HttpChecksumRequired", + "http": { + "method": "POST", + "requestUri": "/HttpChecksumRequired", + "responseCode": 200 + }, + "input": { + "shape": "HttpChecksumRequiredInputOutput" + }, + "documentation": "This example tests httpChecksumRequired trait
", + "httpChecksumRequired": true + }, + "description": "Adds Content-MD5 header", + "params": { + "foo": "base64 encoded md5 checksum" + }, + "serialized": { + "method": "POST", + "uri": "/HttpChecksumRequired", + "body": "{\n \"foo\":\"base64 encoded md5 checksum\"\n}\n", + "headers": { + "Content-MD5": "iB0/3YSo7maijL0IGOgA9g==", + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for HttpEnumPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "EnumPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "StringEnum" + } + }, + "payload": "payload" + }, + "StringEnum": { + "type": "string", + "enum": [ + "enumvalue" + ] + } + }, + "cases": [ + { + "id": "RestJsonEnumPayloadRequest", + "given": { + "name": "HttpEnumPayload", + "http": { + "method": "POST", + "requestUri": "/EnumPayload", + "responseCode": 200 + }, + "input": { + "shape": "EnumPayloadInput" + } + }, + "params": { + "payload": "enumvalue" + }, + "serialized": { + "method": "POST", + "uri": "/EnumPayload", + "body": "enumvalue", + "headers": { + "Content-Type": "text/plain" + } + } + } + ] + }, + { + "description": "Test cases for HttpPayloadTraits operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadTraitsInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "blob": { + "shape": "Blob" + } + }, + "payload": "blob" + }, + "String": { + "type": "string" + }, + "Blob": { + "type": "blob" + } + }, + "cases": [ + { + "id": "RestJsonHttpPayloadTraitsWithBlob", + "given": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no JSON document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes a blob in the HTTP payload", + "params": { + "foo": "Foo", + "blob": "blobby blob blob" + }, + "serialized": { + "method": "POST", + "uri": "/HttpPayloadTraits", + "body": "blobby blob blob", + "headers": { + "Content-Type": "application/octet-stream", + "X-Foo": "Foo" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RestJsonHttpPayloadTraitsWithNoBlobBody", + "given": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no JSON document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes an empty blob in the HTTP payload", + "params": { + "foo": "Foo" + }, + "serialized": { + "method": "POST", + "uri": "/HttpPayloadTraits", + "body": "", + "headers": { + "X-Foo": "Foo" + } + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithStructure operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithStructureInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "NestedPayload" + } + }, + "payload": "nested" + }, + "NestedPayload": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + }, + "name": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpPayloadWithStructure", + "given": { + "name": "HttpPayloadWithStructure", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithStructure", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithStructureInputOutput" + }, + "documentation": "This example serializes a structure in the payload.
Note that serializing a structure changes the wrapper element name to match the targeted structure.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload", + "params": { + "nested": { + "greeting": "hello", + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithStructure", + "body": "{\n \"greeting\": \"hello\",\n \"name\": \"Phreddy\"\n}", + "headers": { + "Content-Type": "application/json" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithUnion operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithUnionInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "UnionPayload" + } + }, + "payload": "nested" + }, + "UnionPayload": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + } + }, + "union": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpPayloadWithUnion", + "given": { + "name": "HttpPayloadWithUnion", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithUnion", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithUnionInputOutput" + }, + "documentation": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "Serializes a union in the payload.", + "params": { + "nested": { + "greeting": "hello" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithUnion", + "body": "{\n \"greeting\": \"hello\"\n}", + "headers": { + "Content-Type": "application/json" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RestJsonHttpPayloadWithUnsetUnion", + "given": { + "name": "HttpPayloadWithUnion", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithUnion", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithUnionInputOutput" + }, + "documentation": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "No payload is sent if the union has no value.", + "params": {}, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithUnion", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpPrefixHeaders operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPrefixHeadersInput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "x-foo" + }, + "fooMap": { + "shape": "StringMap", + "location": "headers", + "locationName": "x-foo-" + } + } + }, + "String": { + "type": "string" + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestJsonHttpPrefixHeadersArePresent", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "input": { + "shape": "HttpPrefixHeadersInput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "Adds headers by prefix", + "params": { + "foo": "Foo", + "fooMap": { + "abc": "Abc value", + "def": "Def value" + } + }, + "serialized": { + "method": "GET", + "uri": "/HttpPrefixHeaders", + "body": "", + "headers": { + "x-foo": "Foo", + "x-foo-abc": "Abc value", + "x-foo-def": "Def value" + } + } + }, + { + "id": "RestJsonHttpPrefixHeadersAreNotPresent", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "input": { + "shape": "HttpPrefixHeadersInput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "No prefix headers are serialized because the value is not present", + "params": { + "foo": "Foo", + "fooMap": {} + }, + "serialized": { + "method": "GET", + "uri": "/HttpPrefixHeaders", + "body": "", + "headers": { + "x-foo": "Foo" + } + } + }, + { + "id": "RestJsonHttpPrefixEmptyHeaders", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "input": { + "shape": "HttpPrefixHeadersInput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "Serialize prefix headers were the value is present but empty", + "params": { + "fooMap": { + "abc": "" + } + }, + "serialized": { + "method": "GET", + "uri": "/HttpPrefixHeaders", + "body": "", + "headers": { + "x-foo-abc": "" + } + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithFloatLabels operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithFloatLabelsInput": { + "type": "structure", + "required": [ + "float", + "double" + ], + "members": { + "float": { + "shape": "Float", + "location": "uri", + "locationName": "float" + }, + "double": { + "shape": "Double", + "location": "uri", + "locationName": "double" + } + } + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonSupportsNaNFloatLabels", + "given": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "description": "Supports handling NaN float label values.", + "params": { + "float": "NaN", + "double": "NaN" + }, + "serialized": { + "method": "GET", + "uri": "/FloatHttpLabels/NaN/NaN", + "body": "" + } + }, + { + "id": "RestJsonSupportsInfinityFloatLabels", + "given": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "description": "Supports handling Infinity float label values.", + "params": { + "float": "Infinity", + "double": "Infinity" + }, + "serialized": { + "method": "GET", + "uri": "/FloatHttpLabels/Infinity/Infinity", + "body": "" + } + }, + { + "id": "RestJsonSupportsNegativeInfinityFloatLabels", + "given": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "description": "Supports handling -Infinity float label values.", + "params": { + "float": "-Infinity", + "double": "-Infinity" + }, + "serialized": { + "method": "GET", + "uri": "/FloatHttpLabels/-Infinity/-Infinity", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithGreedyLabelInPath operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithGreedyLabelInPathInput": { + "type": "structure", + "required": [ + "foo", + "baz" + ], + "members": { + "foo": { + "shape": "String", + "location": "uri", + "locationName": "foo" + }, + "baz": { + "shape": "String", + "location": "uri", + "locationName": "baz" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpRequestWithGreedyLabelInPath", + "given": { + "name": "HttpRequestWithGreedyLabelInPath", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithGreedyLabelInPath/foo/{foo}/baz/{baz+}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithGreedyLabelInPathInput" + } + }, + "description": "Serializes greedy labels and normal labels", + "params": { + "foo": "hello/escape", + "baz": "there/guy" + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithGreedyLabelInPath/foo/hello%2Fescape/baz/there/guy", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithLabels operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithLabelsInput": { + "type": "structure", + "required": [ + "string", + "short", + "integer", + "long", + "float", + "double", + "boolean", + "timestamp" + ], + "members": { + "string": { + "shape": "String", + "location": "uri", + "locationName": "string" + }, + "short": { + "shape": "Integer", + "location": "uri", + "locationName": "short" + }, + "integer": { + "shape": "Integer", + "location": "uri", + "locationName": "integer" + }, + "long": { + "shape": "Long", + "location": "uri", + "locationName": "long" + }, + "float": { + "shape": "Float", + "location": "uri", + "locationName": "float" + }, + "double": { + "shape": "Double", + "location": "uri", + "locationName": "double" + }, + "boolean": { + "shape": "Boolean", + "documentation": "Serialized in the path as true or false.
", + "location": "uri", + "locationName": "boolean" + }, + "timestamp": { + "shape": "Timestamp", + "documentation": "Note that this member has no format, so it's serialized as an RFC 3399 date-time.
", + "location": "uri", + "locationName": "timestamp" + } + } + }, + "String": { + "type": "string" + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Timestamp": { + "type": "timestamp" + } + }, + "cases": [ + { + "id": "RestJsonInputWithHeadersAndAllParams", + "given": { + "name": "HttpRequestWithLabels", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsInput" + }, + "documentation": "The example tests how requests are serialized when there's no input payload but there are HTTP labels.
" + }, + "description": "Sends a GET request that uses URI label bindings", + "params": { + "string": "string", + "short": 1, + "integer": 2, + "long": 3, + "float": 4.1, + "double": 5.1, + "boolean": true, + "timestamp": 1576540098 + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithLabels/string/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z", + "body": "" + } + }, + { + "id": "RestJsonHttpRequestLabelEscaping", + "given": { + "name": "HttpRequestWithLabels", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsInput" + }, + "documentation": "The example tests how requests are serialized when there's no input payload but there are HTTP labels.
" + }, + "description": "Sends a GET request that uses URI label bindings", + "params": { + "string": " %:/?#[]@!$&'()*+,;=😹", + "short": 1, + "integer": 2, + "long": 3, + "float": 4.1, + "double": 5.1, + "boolean": true, + "timestamp": 1576540098 + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithLabels/%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithLabelsAndTimestampFormat operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithLabelsAndTimestampFormatInput": { + "type": "structure", + "required": [ + "memberEpochSeconds", + "memberHttpDate", + "memberDateTime", + "defaultFormat", + "targetEpochSeconds", + "targetHttpDate", + "targetDateTime" + ], + "members": { + "memberEpochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds", + "location": "uri", + "locationName": "memberEpochSeconds" + }, + "memberHttpDate": { + "shape": "SyntheticTimestamp_http_date", + "location": "uri", + "locationName": "memberHttpDate" + }, + "memberDateTime": { + "shape": "SyntheticTimestamp_date_time", + "location": "uri", + "locationName": "memberDateTime" + }, + "defaultFormat": { + "shape": "Timestamp", + "location": "uri", + "locationName": "defaultFormat" + }, + "targetEpochSeconds": { + "shape": "EpochSeconds", + "location": "uri", + "locationName": "targetEpochSeconds" + }, + "targetHttpDate": { + "shape": "HttpDate", + "location": "uri", + "locationName": "targetHttpDate" + }, + "targetDateTime": { + "shape": "DateTime", + "location": "uri", + "locationName": "targetDateTime" + } + } + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "Timestamp": { + "type": "timestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + } + }, + "cases": [ + { + "id": "RestJsonHttpRequestWithLabelsAndTimestampFormat", + "given": { + "name": "HttpRequestWithLabelsAndTimestampFormat", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabelsAndTimestampFormat/{memberEpochSeconds}/{memberHttpDate}/{memberDateTime}/{defaultFormat}/{targetEpochSeconds}/{targetHttpDate}/{targetDateTime}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsAndTimestampFormatInput" + }, + "documentation": "The example tests how requests serialize different timestamp formats in the URI path.
" + }, + "description": "Serializes different timestamp formats in URI labels", + "params": { + "memberEpochSeconds": 1576540098, + "memberHttpDate": 1576540098, + "memberDateTime": 1576540098, + "defaultFormat": 1576540098, + "targetEpochSeconds": 1576540098, + "targetHttpDate": 1576540098, + "targetDateTime": 1576540098 + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithLabelsAndTimestampFormat/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z/2019-12-16T23%3A48%3A18Z/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithRegexLiteral operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithRegexLiteralInput": { + "type": "structure", + "required": [ + "str" + ], + "members": { + "str": { + "shape": "String", + "location": "uri", + "locationName": "str" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonToleratesRegexCharsInSegments", + "given": { + "name": "HttpRequestWithRegexLiteral", + "http": { + "method": "GET", + "requestUri": "/ReDosLiteral/{str}/(a+)+", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithRegexLiteralInput" + } + }, + "description": "Path matching is not broken by regex expressions in literal segments", + "params": { + "str": "abc" + }, + "serialized": { + "method": "GET", + "uri": "/ReDosLiteral/abc/(a+)+", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpStringPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "StringPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "String" + } + }, + "payload": "payload" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonStringPayloadRequest", + "given": { + "name": "HttpStringPayload", + "http": { + "method": "POST", + "requestUri": "/StringPayload", + "responseCode": 200 + }, + "input": { + "shape": "StringPayloadInput" + } + }, + "params": { + "payload": "rawstring" + }, + "serialized": { + "method": "POST", + "uri": "/StringPayload", + "body": "rawstring", + "headers": { + "Content-Type": "text/plain" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for InputAndOutputWithHeaders operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "InputAndOutputWithHeadersIO": { + "type": "structure", + "members": { + "headerString": { + "shape": "String", + "location": "header", + "locationName": "X-String" + }, + "headerByte": { + "shape": "Integer", + "location": "header", + "locationName": "X-Byte" + }, + "headerShort": { + "shape": "Integer", + "location": "header", + "locationName": "X-Short" + }, + "headerInteger": { + "shape": "Integer", + "location": "header", + "locationName": "X-Integer" + }, + "headerLong": { + "shape": "Long", + "location": "header", + "locationName": "X-Long" + }, + "headerFloat": { + "shape": "Float", + "location": "header", + "locationName": "X-Float" + }, + "headerDouble": { + "shape": "Double", + "location": "header", + "locationName": "X-Double" + }, + "headerTrueBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean1" + }, + "headerFalseBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean2" + }, + "headerStringList": { + "shape": "StringList", + "location": "header", + "locationName": "X-StringList" + }, + "headerStringSet": { + "shape": "StringSet", + "location": "header", + "locationName": "X-StringSet" + }, + "headerIntegerList": { + "shape": "IntegerList", + "location": "header", + "locationName": "X-IntegerList" + }, + "headerBooleanList": { + "shape": "BooleanList", + "location": "header", + "locationName": "X-BooleanList" + }, + "headerTimestampList": { + "shape": "TimestampList", + "location": "header", + "locationName": "X-TimestampList" + }, + "headerEnum": { + "shape": "FooEnum", + "location": "header", + "locationName": "X-Enum" + }, + "headerEnumList": { + "shape": "FooEnumList", + "location": "header", + "locationName": "X-EnumList" + }, + "headerIntegerEnum": { + "shape": "IntegerEnum", + "location": "header", + "locationName": "X-IntegerEnum" + }, + "headerIntegerEnumList": { + "shape": "IntegerEnumList", + "location": "header", + "locationName": "X-IntegerEnumList" + } + } + }, + "String": { + "type": "string" + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "Timestamp": { + "type": "timestamp" + } + }, + "cases": [ + { + "id": "RestJsonInputAndOutputWithStringHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with string header bindings", + "params": { + "headerString": "Hello", + "headerStringList": [ + "a", + "b", + "c" + ], + "headerStringSet": [ + "a", + "b", + "c" + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-String": "Hello", + "X-StringList": "a, b, c", + "X-StringSet": "a, b, c" + } + } + }, + { + "id": "RestJsonInputAndOutputWithQuotedStringHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with string list header bindings that require quoting", + "params": { + "headerStringList": [ + "b,c", + "\"def\"", + "a" + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-StringList": "\"b,c\", \"\\\"def\\\"\", a" + } + } + }, + { + "id": "RestJsonInputAndOutputWithNumericHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with numeric header bindings", + "params": { + "headerByte": 1, + "headerShort": 123, + "headerInteger": 123, + "headerLong": 123, + "headerFloat": 1.1, + "headerDouble": 1.1, + "headerIntegerList": [ + 1, + 2, + 3 + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Byte": "1", + "X-Double": "1.1", + "X-Float": "1.1", + "X-Integer": "123", + "X-IntegerList": "1, 2, 3", + "X-Long": "123", + "X-Short": "123" + } + } + }, + { + "id": "RestJsonInputAndOutputWithBooleanHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with boolean header bindings", + "params": { + "headerTrueBool": true, + "headerFalseBool": false, + "headerBooleanList": [ + true, + false, + true + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Boolean1": "true", + "X-Boolean2": "false", + "X-BooleanList": "true, false, true" + } + } + }, + { + "id": "RestJsonInputAndOutputWithTimestampHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with timestamp header bindings", + "params": { + "headerTimestampList": [ + 1576540098, + 1576540098 + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT" + } + } + }, + { + "id": "RestJsonInputAndOutputWithEnumHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with enum header bindings", + "params": { + "headerEnum": "Foo", + "headerEnumList": [ + "Foo", + "Bar", + "Baz" + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Enum": "Foo", + "X-EnumList": "Foo, Bar, Baz" + } + } + }, + { + "id": "RestJsonInputAndOutputWithIntEnumHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with intEnum header bindings", + "params": { + "headerIntegerEnum": 1, + "headerIntegerEnumList": [ + 1, + 2, + 3 + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-IntegerEnum": "1", + "X-IntegerEnumList": "1, 2, 3" + } + } + }, + { + "id": "RestJsonSupportsNaNFloatHeaderInputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling NaN float header values.", + "params": { + "headerFloat": "NaN", + "headerDouble": "NaN" + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Double": "NaN", + "X-Float": "NaN" + } + } + }, + { + "id": "RestJsonSupportsInfinityFloatHeaderInputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling Infinity float header values.", + "params": { + "headerFloat": "Infinity", + "headerDouble": "Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Double": "Infinity", + "X-Float": "Infinity" + } + } + }, + { + "id": "RestJsonSupportsNegativeInfinityFloatHeaderInputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling -Infinity float header values.", + "params": { + "headerFloat": "-Infinity", + "headerDouble": "-Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Double": "-Infinity", + "X-Float": "-Infinity" + } + } + } + ] + }, + { + "description": "Test cases for JsonBlobs operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonBlobsInputOutput": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "Blob": { + "type": "blob" + } + }, + "cases": [ + { + "id": "RestJsonJsonBlobs", + "given": { + "name": "JsonBlobs", + "http": { + "method": "POST", + "requestUri": "/JsonBlobs", + "responseCode": 200 + }, + "input": { + "shape": "JsonBlobsInputOutput" + }, + "documentation": "Blobs are base64 encoded
" + }, + "description": "Blobs are base64 encoded", + "params": { + "data": "value" + }, + "serialized": { + "method": "POST", + "uri": "/JsonBlobs", + "body": "{\n \"data\": \"dmFsdWU=\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for JsonEnums operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonEnumsInputOutput": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonJsonEnums", + "given": { + "name": "JsonEnums", + "http": { + "method": "PUT", + "requestUri": "/JsonEnums", + "responseCode": 200 + }, + "input": { + "shape": "JsonEnumsInputOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "params": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonEnums", + "body": "{\n \"fooEnum1\": \"Foo\",\n \"fooEnum2\": \"0\",\n \"fooEnum3\": \"1\",\n \"fooEnumList\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumSet\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumMap\": {\n \"hi\": \"Foo\",\n \"zero\": \"0\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for JsonIntEnums operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonIntEnumsInputOutput": { + "type": "structure", + "members": { + "integerEnum1": { + "shape": "IntegerEnum" + }, + "integerEnum2": { + "shape": "IntegerEnum" + }, + "integerEnum3": { + "shape": "IntegerEnum" + }, + "integerEnumList": { + "shape": "IntegerEnumList" + }, + "integerEnumSet": { + "shape": "IntegerEnumSet" + }, + "integerEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonJsonIntEnums", + "given": { + "name": "JsonIntEnums", + "http": { + "method": "PUT", + "requestUri": "/JsonIntEnums", + "responseCode": 200 + }, + "input": { + "shape": "JsonIntEnumsInputOutput" + }, + "documentation": "This example serializes intEnums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes intEnums as integers", + "params": { + "integerEnum1": 1, + "integerEnum2": 2, + "integerEnum3": 3, + "integerEnumList": [ + 1, + 2, + 3 + ], + "integerEnumSet": [ + 1, + 2 + ], + "integerEnumMap": { + "abc": 1, + "def": 2 + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonIntEnums", + "body": "{\n \"integerEnum1\": 1,\n \"integerEnum2\": 2,\n \"integerEnum3\": 3,\n \"integerEnumList\": [\n 1,\n 2,\n 3\n ],\n \"integerEnumSet\": [\n 1,\n 2\n ],\n \"integerEnumMap\": {\n \"abc\": 1,\n \"def\": 2\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for JsonLists operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonListsInputOutput": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonLists", + "given": { + "name": "JsonLists", + "http": { + "method": "PUT", + "requestUri": "/JsonLists", + "responseCode": 200 + }, + "input": { + "shape": "JsonListsInputOutput" + }, + "documentation": "This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "description": "Serializes JSON maps", + "params": { + "denseStructMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/JsonMaps", + "body": "{\n \"denseStructMap\": {\n \"foo\": {\n \"hi\": \"there\"\n },\n \"baz\": {\n \"hi\": \"bye\"\n }\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializesZeroValuesInMaps", + "given": { + "name": "JsonMaps", + "http": { + "method": "POST", + "requestUri": "/JsonMaps", + "responseCode": 200 + }, + "input": { + "shape": "JsonMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Ensure that 0 and false are sent over the wire in all maps and lists", + "params": { + "denseNumberMap": { + "x": 0 + }, + "denseBooleanMap": { + "x": false + } + }, + "serialized": { + "method": "POST", + "uri": "/JsonMaps", + "body": "{\n \"denseNumberMap\": {\n \"x\": 0\n },\n \"denseBooleanMap\": {\n \"x\": false\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializesDenseSetMap", + "given": { + "name": "JsonMaps", + "http": { + "method": "POST", + "requestUri": "/JsonMaps", + "responseCode": 200 + }, + "input": { + "shape": "JsonMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "A request that contains a dense map of sets.", + "params": { + "denseSetMap": { + "x": [], + "y": [ + "a", + "b" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/JsonMaps", + "body": "{\n \"denseSetMap\": {\n \"x\": [],\n \"y\": [\"a\", \"b\"]\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for JsonTimestamps operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonTimestampsInputOutput": { + "type": "structure", + "members": { + "normal": { + "shape": "Timestamp" + }, + "dateTime": { + "shape": "SyntheticTimestamp_date_time" + }, + "dateTimeOnTarget": { + "shape": "DateTime" + }, + "epochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochSecondsOnTarget": { + "shape": "EpochSeconds" + }, + "httpDate": { + "shape": "SyntheticTimestamp_http_date" + }, + "httpDateOnTarget": { + "shape": "HttpDate" + } + } + }, + "Timestamp": { + "type": "timestamp" + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + } + }, + "cases": [ + { + "id": "RestJsonJsonTimestamps", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Tests how normal timestamps are serialized", + "params": { + "normal": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"normal\": 1398796238\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonJsonTimestampsWithDateTimeFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time works like normal timestamps", + "params": { + "dateTime": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"dateTime\": \"2014-04-29T18:30:38Z\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonJsonTimestampsWithDateTimeOnTargetFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps", + "params": { + "dateTimeOnTarget": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"dateTimeOnTarget\": \"2014-04-29T18:30:38Z\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonJsonTimestampsWithEpochSecondsFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds works", + "params": { + "epochSeconds": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"epochSeconds\": 1398796238\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonJsonTimestampsWithEpochSecondsOnTargetFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works", + "params": { + "epochSecondsOnTarget": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"epochSecondsOnTarget\": 1398796238\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonJsonTimestampsWithHttpDateFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date works", + "params": { + "httpDate": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"httpDate\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonJsonTimestampsWithHttpDateOnTargetFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "input": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date on the target shape works", + "params": { + "httpDateOnTarget": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/JsonTimestamps", + "body": "{\n \"httpDateOnTarget\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for JsonUnions operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "UnionInputOutput": { + "type": "structure", + "members": { + "contents": { + "shape": "MyUnion" + } + }, + "documentation": "A shared structure that contains a single union member.
" + }, + "MyUnion": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "numberValue": { + "shape": "Integer" + }, + "blobValue": { + "shape": "Blob" + }, + "timestampValue": { + "shape": "Timestamp" + }, + "enumValue": { + "shape": "FooEnum" + }, + "listValue": { + "shape": "StringList" + }, + "mapValue": { + "shape": "StringMap" + }, + "structureValue": { + "shape": "GreetingStruct" + }, + "renamedStructureValue": { + "shape": "RenamedGreeting" + } + }, + "documentation": "A union with a representative set of types for members.
", + "union": true + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Blob": { + "type": "blob" + }, + "Timestamp": { + "type": "timestamp" + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + }, + "RenamedGreeting": { + "type": "structure", + "members": { + "salutation": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "RestJsonSerializeStringUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a string union value", + "params": { + "contents": { + "stringValue": "foo" + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"stringValue\": \"foo\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeBooleanUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a boolean union value", + "params": { + "contents": { + "booleanValue": true + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"booleanValue\": true\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeNumberUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a number union value", + "params": { + "contents": { + "numberValue": 1 + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"numberValue\": 1\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeBlobUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a blob union value", + "params": { + "contents": { + "blobValue": "foo" + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"blobValue\": \"Zm9v\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeTimestampUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a timestamp union value", + "params": { + "contents": { + "timestampValue": 1398796238 + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"timestampValue\": 1398796238\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes an enum union value", + "params": { + "contents": { + "enumValue": "Foo" + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"enumValue\": \"Foo\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeListUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a list union value", + "params": { + "contents": { + "listValue": [ + "foo", + "bar" + ] + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"listValue\": [\"foo\", \"bar\"]\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeMapUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a map union value", + "params": { + "contents": { + "mapValue": { + "foo": "bar", + "spam": "eggs" + } + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"mapValue\": {\n \"foo\": \"bar\",\n \"spam\": \"eggs\"\n }\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a structure union value", + "params": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSerializeRenamedStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "input": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Serializes a renamed structure union value", + "params": { + "contents": { + "renamedStructureValue": { + "salutation": "hello!" + } + } + }, + "serialized": { + "method": "PUT", + "uri": "/JsonUnions", + "body": "{\n \"contents\": {\n \"renamedStructureValue\": {\n \"salutation\": \"hello!\"\n }\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for MediaTypeHeader operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "MediaTypeHeaderInput": { + "type": "structure", + "members": { + "json": { + "shape": "JsonValue", + "jsonvalue": true, + "location": "header", + "locationName": "X-Json" + } + } + }, + "JsonValue": { + "type": "string" + } + }, + "cases": [ + { + "id": "MediaTypeHeaderInputBase64", + "given": { + "name": "MediaTypeHeader", + "http": { + "method": "GET", + "requestUri": "/MediaTypeHeader", + "responseCode": 200 + }, + "input": { + "shape": "MediaTypeHeaderInput" + }, + "documentation": "This example ensures that mediaType strings are base64 encoded in headers.
" + }, + "description": "Headers that target strings with a mediaType are base64 encoded", + "params": { + "json": "true" + }, + "serialized": { + "method": "GET", + "uri": "/MediaTypeHeader", + "body": "", + "headers": { + "X-Json": "dHJ1ZQ==" + } + } + } + ] + }, + { + "description": "Test cases for NoInputAndNoOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonNoInputAndNoOutput", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndNoOutput", + "responseCode": 200 + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no payload. When clients do not need to\nserialize any data in the payload, they should omit a payload\naltogether.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/NoInputAndNoOutput", + "body": "" + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonNoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndOutputOutput", + "responseCode": 200 + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no payload. When clients do not need to\nserialize any data in the payload, they should omit a payload\naltogether.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/NoInputAndOutputOutput", + "body": "" + } + } + ] + }, + { + "description": "Test cases for NullAndEmptyHeadersClient operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "NullAndEmptyHeadersIO": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "location": "header", + "locationName": "X-A" + }, + "b": { + "shape": "String", + "location": "header", + "locationName": "X-B" + }, + "c": { + "shape": "StringList", + "location": "header", + "locationName": "X-C" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestJsonNullAndEmptyHeaders", + "given": { + "name": "NullAndEmptyHeadersClient", + "http": { + "method": "GET", + "requestUri": "/NullAndEmptyHeadersClient", + "responseCode": 200 + }, + "input": { + "shape": "NullAndEmptyHeadersIO" + }, + "documentation": "Null headers are not sent over the wire, empty headers are serialized to ""
" + }, + "description": "Do not send null values, but do send empty strings and empty lists over the wire in headers", + "params": { + "a": null, + "b": "", + "c": [] + }, + "serialized": { + "method": "GET", + "uri": "/NullAndEmptyHeadersClient", + "body": "", + "headers": { + "X-B": "", + "X-C": "" + }, + "forbidHeaders": [ + "X-A" + ] + } + } + ] + }, + { + "description": "Test cases for OmitsNullSerializesEmptyString operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "OmitsNullSerializesEmptyStringInput": { + "type": "structure", + "members": { + "nullValue": { + "shape": "String", + "location": "querystring", + "locationName": "Null" + }, + "emptyString": { + "shape": "String", + "location": "querystring", + "locationName": "Empty" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonOmitsNullQuery", + "given": { + "name": "OmitsNullSerializesEmptyString", + "http": { + "method": "GET", + "requestUri": "/OmitsNullSerializesEmptyString", + "responseCode": 200 + }, + "input": { + "shape": "OmitsNullSerializesEmptyStringInput" + }, + "documentation": "Omits null, but serializes empty string value.
" + }, + "description": "Omits null query values", + "params": { + "nullValue": null + }, + "serialized": { + "method": "GET", + "uri": "/OmitsNullSerializesEmptyString", + "body": "" + } + }, + { + "id": "RestJsonSerializesEmptyQueryValue", + "given": { + "name": "OmitsNullSerializesEmptyString", + "http": { + "method": "GET", + "requestUri": "/OmitsNullSerializesEmptyString", + "responseCode": 200 + }, + "input": { + "shape": "OmitsNullSerializesEmptyStringInput" + }, + "documentation": "Omits null, but serializes empty string value.
" + }, + "description": "Serializes empty query strings", + "params": { + "emptyString": "" + }, + "serialized": { + "method": "GET", + "uri": "/OmitsNullSerializesEmptyString?Empty=", + "body": "" + } + } + ] + }, + { + "description": "Test cases for OmitsSerializingEmptyLists operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "OmitsSerializingEmptyListsInput": { + "type": "structure", + "members": { + "queryStringList": { + "shape": "StringList", + "location": "querystring", + "locationName": "StringList" + }, + "queryIntegerList": { + "shape": "IntegerList", + "location": "querystring", + "locationName": "IntegerList" + }, + "queryDoubleList": { + "shape": "DoubleList", + "location": "querystring", + "locationName": "DoubleList" + }, + "queryBooleanList": { + "shape": "BooleanList", + "location": "querystring", + "locationName": "BooleanList" + }, + "queryTimestampList": { + "shape": "TimestampList", + "location": "querystring", + "locationName": "TimestampList" + }, + "queryEnumList": { + "shape": "FooEnumList", + "location": "querystring", + "locationName": "EnumList" + }, + "queryIntegerEnumList": { + "shape": "IntegerEnumList", + "location": "querystring", + "locationName": "IntegerEnumList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "DoubleList": { + "type": "list", + "member": { + "shape": "Double" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonOmitsEmptyListQueryValues", + "given": { + "name": "OmitsSerializingEmptyLists", + "http": { + "method": "POST", + "requestUri": "/OmitsSerializingEmptyLists", + "responseCode": 200 + }, + "input": { + "shape": "OmitsSerializingEmptyListsInput" + }, + "documentation": "Omits serializing empty lists. Because empty strings are serilized as Foo=
, empty lists cannot also be serialized as Foo=
and instead must be omitted.
This operation defines a union that uses jsonName on some members.
" + }, + "description": "Tests that jsonName works with union members.", + "params": { + "value": { + "foo": "hi" + } + }, + "serialized": { + "method": "POST", + "uri": "/PostUnionWithJsonName", + "body": "{\n \"value\": {\n \"FOO\": \"hi\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "PostUnionWithJsonNameRequest2", + "given": { + "name": "PostUnionWithJsonName", + "http": { + "method": "POST", + "requestUri": "/PostUnionWithJsonName", + "responseCode": 200 + }, + "input": { + "shape": "PostUnionWithJsonNameInput" + }, + "documentation": "This operation defines a union that uses jsonName on some members.
" + }, + "description": "Tests that jsonName works with union members.", + "params": { + "value": { + "baz": "hi" + } + }, + "serialized": { + "method": "POST", + "uri": "/PostUnionWithJsonName", + "body": "{\n \"value\": {\n \"_baz\": \"hi\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "PostUnionWithJsonNameRequest3", + "given": { + "name": "PostUnionWithJsonName", + "http": { + "method": "POST", + "requestUri": "/PostUnionWithJsonName", + "responseCode": 200 + }, + "input": { + "shape": "PostUnionWithJsonNameInput" + }, + "documentation": "This operation defines a union that uses jsonName on some members.
" + }, + "description": "Tests that jsonName works with union members.", + "params": { + "value": { + "bar": "hi" + } + }, + "serialized": { + "method": "POST", + "uri": "/PostUnionWithJsonName", + "body": "{\n \"value\": {\n \"bar\": \"hi\"\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for PutWithContentEncoding operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String", + "location": "header", + "locationName": "Content-Encoding" + }, + "data": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "SDKAppliedContentEncoding_restJson1", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/requestcompression/putcontentwithencoding", + "responseCode": 200 + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header.", + "params": { + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/requestcompression/putcontentwithencoding", + "headers": { + "Content-Encoding": "gzip" + } + } + }, + { + "id": "SDKAppendedGzipAfterProvidedEncoding_restJson1", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/requestcompression/putcontentwithencoding", + "responseCode": 200 + }, + "input": { + "shape": "PutWithContentEncodingInput" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is in the Content-Encoding header before the\nrequest compression encoding from the HTTP binding.\n", + "params": { + "encoding": "custom", + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/requestcompression/putcontentwithencoding", + "headers": { + "Content-Encoding": "custom, gzip" + } + } + } + ] + }, + { + "description": "Test cases for QueryIdempotencyTokenAutoFill operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true, + "location": "querystring", + "locationName": "token" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonQueryIdempotencyTokenAutoFill", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/QueryIdempotencyTokenAutoFill", + "responseCode": 200 + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Automatically adds idempotency token when not set", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000", + "body": "" + } + }, + { + "id": "RestJsonQueryIdempotencyTokenAutoFillIsSet", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/QueryIdempotencyTokenAutoFill", + "responseCode": 200 + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Uses the given idempotency token as-is", + "params": { + "token": "00000000-0000-4000-8000-000000000000" + }, + "serialized": { + "method": "POST", + "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000", + "body": "" + } + } + ] + }, + { + "description": "Test cases for QueryParamsAsStringListMap operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "QueryParamsAsStringListMapInput": { + "type": "structure", + "members": { + "qux": { + "shape": "String", + "location": "querystring", + "locationName": "corge" + }, + "foo": { + "shape": "StringListMap", + "location": "querystring" + } + } + }, + "String": { + "type": "string" + }, + "StringListMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringList" + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestJsonQueryParamsStringListMap", + "given": { + "name": "QueryParamsAsStringListMap", + "http": { + "method": "POST", + "requestUri": "/StringListMap", + "responseCode": 200 + }, + "input": { + "shape": "QueryParamsAsStringListMapInput" + } + }, + "description": "Serialize query params from map of list strings", + "params": { + "qux": "named", + "foo": { + "baz": [ + "bar", + "qux" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/StringListMap?corge=named&baz=bar&baz=qux", + "body": "" + } + } + ] + }, + { + "description": "Test cases for QueryPrecedence operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "QueryPrecedenceInput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "querystring", + "locationName": "bar" + }, + "baz": { + "shape": "StringMap", + "location": "querystring" + } + } + }, + "String": { + "type": "string" + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestJsonQueryPrecedence", + "given": { + "name": "QueryPrecedence", + "http": { + "method": "POST", + "requestUri": "/Precedence", + "responseCode": 200 + }, + "input": { + "shape": "QueryPrecedenceInput" + } + }, + "description": "Prefer named query parameters when serializing", + "params": { + "foo": "named", + "baz": { + "bar": "fromMap", + "qux": "alsoFromMap" + } + }, + "serialized": { + "method": "POST", + "uri": "/Precedence?bar=named&qux=alsoFromMap", + "body": "" + } + } + ] + }, + { + "description": "Test cases for RecursiveShapes operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "RecursiveShapesInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesInputOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveShapesInputOutputNested2" + } + } + }, + "String": { + "type": "string" + }, + "RecursiveShapesInputOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + } + }, + "cases": [ + { + "id": "RestJsonRecursiveShapes", + "given": { + "name": "RecursiveShapes", + "http": { + "method": "PUT", + "requestUri": "/RecursiveShapes", + "responseCode": 200 + }, + "input": { + "shape": "RecursiveShapesInputOutput" + }, + "documentation": "Recursive shapes
", + "idempotent": true + }, + "description": "Serializes recursive structures", + "params": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "serialized": { + "method": "PUT", + "uri": "/RecursiveShapes", + "body": "{\n \"nested\": {\n \"foo\": \"Foo1\",\n \"nested\": {\n \"bar\": \"Bar1\",\n \"recursiveMember\": {\n \"foo\": \"Foo2\",\n \"nested\": {\n \"bar\": \"Bar2\"\n }\n }\n }\n }\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for SimpleScalarProperties operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "SimpleScalarPropertiesInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "stringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonSimpleScalarProperties", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "params": { + "foo": "Foo", + "stringValue": "string", + "trueBooleanValue": true, + "falseBooleanValue": false, + "byteValue": 1, + "shortValue": 2, + "integerValue": 3, + "longValue": 4, + "floatValue": 5.5, + "doubleValue": 6.5 + }, + "serialized": { + "method": "PUT", + "uri": "/SimpleScalarProperties", + "body": "{\n \"stringValue\": \"string\",\n \"trueBooleanValue\": true,\n \"falseBooleanValue\": false,\n \"byteValue\": 1,\n \"shortValue\": 2,\n \"integerValue\": 3,\n \"longValue\": 4,\n \"floatValue\": 5.5,\n \"DoubleDribble\": 6.5\n}", + "headers": { + "Content-Type": "application/json", + "X-Foo": "Foo" + } + } + }, + { + "id": "RestJsonDoesntSerializeNullStructureValues", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Rest Json should not serialize null structure values", + "params": { + "stringValue": null + }, + "serialized": { + "method": "PUT", + "uri": "/SimpleScalarProperties", + "body": "{}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSupportsNaNFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Supports handling NaN float values.", + "params": { + "floatValue": "NaN", + "doubleValue": "NaN" + }, + "serialized": { + "method": "PUT", + "uri": "/SimpleScalarProperties", + "body": "{\n \"floatValue\": \"NaN\",\n \"DoubleDribble\": \"NaN\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSupportsInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Supports handling Infinity float values.", + "params": { + "floatValue": "Infinity", + "doubleValue": "Infinity" + }, + "serialized": { + "method": "PUT", + "uri": "/SimpleScalarProperties", + "body": "{\n \"floatValue\": \"Infinity\",\n \"DoubleDribble\": \"Infinity\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "id": "RestJsonSupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "input": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Supports handling -Infinity float values.", + "params": { + "floatValue": "-Infinity", + "doubleValue": "-Infinity" + }, + "serialized": { + "method": "PUT", + "uri": "/SimpleScalarProperties", + "body": "{\n \"floatValue\": \"-Infinity\",\n \"DoubleDribble\": \"-Infinity\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] + }, + { + "description": "Test cases for TestBodyStructure operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TestBodyStructureInputOutput": { + "type": "structure", + "members": { + "testId": { + "shape": "String", + "location": "header", + "locationName": "x-amz-test-id" + }, + "testConfig": { + "shape": "TestConfig" + } + } + }, + "String": { + "type": "string" + }, + "TestConfig": { + "type": "structure", + "members": { + "timeout": { + "shape": "Integer" + } + } + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonTestBodyStructure", + "given": { + "name": "TestBodyStructure", + "http": { + "method": "POST", + "requestUri": "/body", + "responseCode": 200 + }, + "input": { + "shape": "TestBodyStructureInputOutput" + }, + "documentation": "This example operation serializes a structure in the HTTP body.
It should ensure Content-Type: application/json is used in all requests and that an "empty" body is an empty JSON document ({}).
", + "idempotent": true + }, + "description": "Serializes a structure", + "params": { + "testConfig": { + "timeout": 10 + } + }, + "serialized": { + "method": "POST", + "uri": "/body", + "body": "{\"testConfig\":\n {\"timeout\": 10}\n}", + "headers": { + "Content-Type": "application/json" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RestJsonHttpWithEmptyBody", + "given": { + "name": "TestBodyStructure", + "http": { + "method": "POST", + "requestUri": "/body", + "responseCode": 200 + }, + "input": { + "shape": "TestBodyStructureInputOutput" + }, + "documentation": "This example operation serializes a structure in the HTTP body.
It should ensure Content-Type: application/json is used in all requests and that an "empty" body is an empty JSON document ({}).
", + "idempotent": true + }, + "description": "Serializes an empty structure in the body", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/body", + "body": "{}", + "headers": { + "Content-Type": "application/json" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for TestGetNoInputNoPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonHttpGetWithNoInput", + "given": { + "name": "TestGetNoInputNoPayload", + "http": { + "method": "GET", + "requestUri": "/no_input_no_payload", + "responseCode": 200 + }, + "documentation": "This example GET operation has no input and serializes a request without a HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.
" + }, + "description": "Serializes a GET request for an operation with no input, and therefore no modeled body", + "params": {}, + "serialized": { + "method": "GET", + "uri": "/no_input_no_payload", + "body": "", + "forbidHeaders": [ + "Content-Type", + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for TestGetNoPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TestNoPayloadInputOutput": { + "type": "structure", + "members": { + "testId": { + "shape": "String", + "location": "header", + "locationName": "X-Amz-Test-Id" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpGetWithNoModeledBody", + "given": { + "name": "TestGetNoPayload", + "http": { + "method": "GET", + "requestUri": "/no_payload", + "responseCode": 200 + }, + "input": { + "shape": "TestNoPayloadInputOutput" + }, + "documentation": "This example GET operation serializes a request without a modeled HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.
" + }, + "description": "Serializes a GET request with no modeled body", + "params": {}, + "serialized": { + "method": "GET", + "uri": "/no_payload", + "body": "", + "forbidHeaders": [ + "Content-Length", + "Content-Type" + ] + } + }, + { + "id": "RestJsonHttpGetWithHeaderMemberNoModeledBody", + "given": { + "name": "TestGetNoPayload", + "http": { + "method": "GET", + "requestUri": "/no_payload", + "responseCode": 200 + }, + "input": { + "shape": "TestNoPayloadInputOutput" + }, + "documentation": "This example GET operation serializes a request without a modeled HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.
" + }, + "description": "Serializes a GET request with header member but no modeled body", + "params": { + "testId": "t-12345" + }, + "serialized": { + "method": "GET", + "uri": "/no_payload", + "body": "", + "headers": { + "X-Amz-Test-Id": "t-12345" + }, + "forbidHeaders": [ + "Content-Length", + "Content-Type" + ] + } + } + ] + }, + { + "description": "Test cases for TestPayloadBlob operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TestPayloadBlobInputOutput": { + "type": "structure", + "members": { + "contentType": { + "shape": "String", + "location": "header", + "locationName": "Content-Type" + }, + "data": { + "shape": "Blob" + } + }, + "payload": "data" + }, + "String": { + "type": "string" + }, + "Blob": { + "type": "blob" + } + }, + "cases": [ + { + "id": "RestJsonHttpWithEmptyBlobPayload", + "given": { + "name": "TestPayloadBlob", + "http": { + "method": "POST", + "requestUri": "/blob_payload", + "responseCode": 200 + }, + "input": { + "shape": "TestPayloadBlobInputOutput" + }, + "documentation": "This example operation serializes a payload targeting a blob.
The Blob shape is not structured content and we cannot make assumptions about what data will be sent. This test ensures only a generic "Content-Type: application/octet-stream" header is used, and that we are not treating an empty body as an empty JSON document.
", + "idempotent": true + }, + "description": "Serializes a payload targeting an empty blob", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/blob_payload", + "body": "" + } + }, + { + "id": "RestJsonTestPayloadBlob", + "given": { + "name": "TestPayloadBlob", + "http": { + "method": "POST", + "requestUri": "/blob_payload", + "responseCode": 200 + }, + "input": { + "shape": "TestPayloadBlobInputOutput" + }, + "documentation": "This example operation serializes a payload targeting a blob.
The Blob shape is not structured content and we cannot make assumptions about what data will be sent. This test ensures only a generic "Content-Type: application/octet-stream" header is used, and that we are not treating an empty body as an empty JSON document.
", + "idempotent": true + }, + "description": "Serializes a payload targeting a blob", + "params": { + "contentType": "image/jpg", + "data": "1234" + }, + "serialized": { + "method": "POST", + "uri": "/blob_payload", + "body": "1234", + "headers": { + "Content-Type": "image/jpg" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for TestPayloadStructure operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TestPayloadStructureInputOutput": { + "type": "structure", + "members": { + "testId": { + "shape": "String", + "location": "header", + "locationName": "x-amz-test-id" + }, + "payloadConfig": { + "shape": "PayloadConfig" + } + }, + "payload": "payloadConfig" + }, + "String": { + "type": "string" + }, + "PayloadConfig": { + "type": "structure", + "members": { + "data": { + "shape": "Integer" + } + } + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonHttpWithEmptyStructurePayload", + "given": { + "name": "TestPayloadStructure", + "http": { + "method": "POST", + "requestUri": "/payload", + "responseCode": 200 + }, + "input": { + "shape": "TestPayloadStructureInputOutput" + }, + "documentation": "This example operation serializes a payload targeting a structure.
This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.
", + "idempotent": true + }, + "description": "Serializes a payload targeting an empty structure", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/payload", + "body": "{}", + "headers": { + "Content-Type": "application/json" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RestJsonTestPayloadStructure", + "given": { + "name": "TestPayloadStructure", + "http": { + "method": "POST", + "requestUri": "/payload", + "responseCode": 200 + }, + "input": { + "shape": "TestPayloadStructureInputOutput" + }, + "documentation": "This example operation serializes a payload targeting a structure.
This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.
", + "idempotent": true + }, + "description": "Serializes a payload targeting a structure", + "params": { + "payloadConfig": { + "data": 25 + } + }, + "serialized": { + "method": "POST", + "uri": "/payload", + "body": "{\"data\": 25\n}", + "headers": { + "Content-Type": "application/json" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RestJsonHttpWithHeadersButNoPayload", + "given": { + "name": "TestPayloadStructure", + "http": { + "method": "POST", + "requestUri": "/payload", + "responseCode": 200 + }, + "input": { + "shape": "TestPayloadStructureInputOutput" + }, + "documentation": "This example operation serializes a payload targeting a structure.
This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.
", + "idempotent": true + }, + "description": "Serializes an request with header members but no payload", + "params": { + "testId": "t-12345" + }, + "serialized": { + "method": "POST", + "uri": "/payload", + "body": "{}", + "headers": { + "Content-Type": "application/json", + "X-Amz-Test-Id": "t-12345" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for TestPostNoInputNoPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonHttpPostWithNoInput", + "given": { + "name": "TestPostNoInputNoPayload", + "http": { + "method": "POST", + "requestUri": "/no_input_no_payload", + "responseCode": 200 + }, + "documentation": "This example POST operation has no input and serializes a request without a HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled input.
" + }, + "description": "Serializes a POST request for an operation with no input, and therefore no modeled body", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/no_input_no_payload", + "body": "", + "forbidHeaders": [ + "Content-Type" + ] + } + } + ] + }, + { + "description": "Test cases for TestPostNoPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TestNoPayloadInputOutput": { + "type": "structure", + "members": { + "testId": { + "shape": "String", + "location": "header", + "locationName": "X-Amz-Test-Id" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpPostWithNoModeledBody", + "given": { + "name": "TestPostNoPayload", + "http": { + "method": "POST", + "requestUri": "/no_payload", + "responseCode": 200 + }, + "input": { + "shape": "TestNoPayloadInputOutput" + }, + "documentation": "This example POST operation serializes a request without a modeled HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled payload.
" + }, + "description": "Serializes a POST request with no modeled body", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/no_payload", + "body": "", + "forbidHeaders": [ + "Content-Type" + ] + } + }, + { + "id": "RestJsonHttpWithPostHeaderMemberNoModeledBody", + "given": { + "name": "TestPostNoPayload", + "http": { + "method": "POST", + "requestUri": "/no_payload", + "responseCode": 200 + }, + "input": { + "shape": "TestNoPayloadInputOutput" + }, + "documentation": "This example POST operation serializes a request without a modeled HTTP body.
These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled payload.
" + }, + "description": "Serializes a POST request with header member but no modeled body", + "params": { + "testId": "t-12345" + }, + "serialized": { + "method": "POST", + "uri": "/no_payload", + "body": "", + "headers": { + "X-Amz-Test-Id": "t-12345" + }, + "forbidHeaders": [ + "Content-Type" + ] + } + } + ] + }, + { + "description": "Test cases for TimestampFormatHeaders operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TimestampFormatHeadersIO": { + "type": "structure", + "members": { + "memberEpochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds", + "location": "header", + "locationName": "X-memberEpochSeconds" + }, + "memberHttpDate": { + "shape": "SyntheticTimestamp_http_date", + "location": "header", + "locationName": "X-memberHttpDate" + }, + "memberDateTime": { + "shape": "SyntheticTimestamp_date_time", + "location": "header", + "locationName": "X-memberDateTime" + }, + "defaultFormat": { + "shape": "Timestamp", + "location": "header", + "locationName": "X-defaultFormat" + }, + "targetEpochSeconds": { + "shape": "EpochSeconds", + "location": "header", + "locationName": "X-targetEpochSeconds" + }, + "targetHttpDate": { + "shape": "HttpDate", + "location": "header", + "locationName": "X-targetHttpDate" + }, + "targetDateTime": { + "shape": "DateTime", + "location": "header", + "locationName": "X-targetDateTime" + } + } + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "Timestamp": { + "type": "timestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + } + }, + "cases": [ + { + "id": "RestJsonTimestampFormatHeaders", + "given": { + "name": "TimestampFormatHeaders", + "http": { + "method": "POST", + "requestUri": "/TimestampFormatHeaders", + "responseCode": 200 + }, + "input": { + "shape": "TimestampFormatHeadersIO" + }, + "documentation": "This example tests how timestamp request and response headers are serialized.
" + }, + "description": "Tests how timestamp request headers are serialized", + "params": { + "memberEpochSeconds": 1576540098, + "memberHttpDate": 1576540098, + "memberDateTime": 1576540098, + "defaultFormat": 1576540098, + "targetEpochSeconds": 1576540098, + "targetHttpDate": 1576540098, + "targetDateTime": 1576540098 + }, + "serialized": { + "method": "POST", + "uri": "/TimestampFormatHeaders", + "body": "", + "headers": { + "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-memberDateTime": "2019-12-16T23:48:18Z", + "X-memberEpochSeconds": "1576540098", + "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-targetDateTime": "2019-12-16T23:48:18Z", + "X-targetEpochSeconds": "1576540098", + "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT" + } + } + } + ] + }, + { + "description": "Test cases for UnitInputAndOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonUnitInputAndOutput", + "given": { + "name": "UnitInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/UnitInputAndOutput", + "responseCode": 200 + }, + "documentation": "This test is similar to NoInputAndNoOutput, but uses explicit Unit types.
" + }, + "description": "A unit type input serializes no payload. When clients do not\nneed to serialize any data in the payload, they should omit\na payload altogether.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/UnitInputAndOutput", + "body": "" + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/input/rest-xml.json b/tools/code-generation/protocol-tests/input/rest-xml.json new file mode 100644 index 00000000000..01891691b05 --- /dev/null +++ b/tools/code-generation/protocol-tests/input/rest-xml.json @@ -0,0 +1,5771 @@ +[ + { + "description": "Test cases for AllQueryStringTypes operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "AllQueryStringTypesInput": { + "type": "structure", + "members": { + "queryString": { + "shape": "String", + "location": "querystring", + "locationName": "String" + }, + "queryStringList": { + "shape": "StringList", + "location": "querystring", + "locationName": "StringList" + }, + "queryStringSet": { + "shape": "StringSet", + "location": "querystring", + "locationName": "StringSet" + }, + "queryByte": { + "shape": "Integer", + "location": "querystring", + "locationName": "Byte" + }, + "queryShort": { + "shape": "Integer", + "location": "querystring", + "locationName": "Short" + }, + "queryInteger": { + "shape": "Integer", + "location": "querystring", + "locationName": "Integer" + }, + "queryIntegerList": { + "shape": "IntegerList", + "location": "querystring", + "locationName": "IntegerList" + }, + "queryIntegerSet": { + "shape": "IntegerSet", + "location": "querystring", + "locationName": "IntegerSet" + }, + "queryLong": { + "shape": "Long", + "location": "querystring", + "locationName": "Long" + }, + "queryFloat": { + "shape": "Float", + "location": "querystring", + "locationName": "Float" + }, + "queryDouble": { + "shape": "Double", + "location": "querystring", + "locationName": "Double" + }, + "queryDoubleList": { + "shape": "DoubleList", + "location": "querystring", + "locationName": "DoubleList" + }, + "queryBoolean": { + "shape": "Boolean", + "location": "querystring", + "locationName": "Boolean" + }, + "queryBooleanList": { + "shape": "BooleanList", + "location": "querystring", + "locationName": "BooleanList" + }, + "queryTimestamp": { + "shape": "Timestamp", + "location": "querystring", + "locationName": "Timestamp" + }, + "queryTimestampList": { + "shape": "TimestampList", + "location": "querystring", + "locationName": "TimestampList" + }, + "queryEnum": { + "shape": "FooEnum", + "location": "querystring", + "locationName": "Enum" + }, + "queryEnumList": { + "shape": "FooEnumList", + "location": "querystring", + "locationName": "EnumList" + }, + "queryIntegerEnum": { + "shape": "IntegerEnum", + "location": "querystring", + "locationName": "IntegerEnum" + }, + "queryIntegerEnumList": { + "shape": "IntegerEnumList", + "location": "querystring", + "locationName": "IntegerEnumList" + }, + "queryParamsMapOfStrings": { + "shape": "StringMap", + "location": "querystring" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "Integer": { + "type": "integer", + "box": true + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "IntegerSet": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "DoubleList": { + "type": "list", + "member": { + "shape": "Double" + } + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "Timestamp": { + "type": "timestamp" + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "AllQueryStringTypes", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Serializes query string parameters with all supported types", + "params": { + "queryString": "Hello there", + "queryStringList": [ + "a", + "b", + "c" + ], + "queryStringSet": [ + "a", + "b", + "c" + ], + "queryByte": 1, + "queryShort": 2, + "queryInteger": 3, + "queryIntegerList": [ + 1, + 2, + 3 + ], + "queryIntegerSet": [ + 1, + 2, + 3 + ], + "queryLong": 4, + "queryFloat": 1.1, + "queryDouble": 1.1, + "queryDoubleList": [ + 1.1, + 2.1, + 3.1 + ], + "queryBoolean": true, + "queryBooleanList": [ + true, + false, + true + ], + "queryTimestamp": 1, + "queryTimestampList": [ + 1, + 2, + 3 + ], + "queryEnum": "Foo", + "queryEnumList": [ + "Foo", + "Baz", + "Bar" + ], + "queryIntegerEnum": 1, + "queryIntegerEnumList": [ + 1, + 2 + ] + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?String=Hello%20there&StringList=a&StringList=b&StringList=c&StringSet=a&StringSet=b&StringSet=c&Byte=1&Short=2&Integer=3&IntegerList=1&IntegerList=2&IntegerList=3&IntegerSet=1&IntegerSet=2&IntegerSet=3&Long=4&Float=1.1&Double=1.1&DoubleList=1.1&DoubleList=2.1&DoubleList=3.1&Boolean=true&BooleanList=true&BooleanList=false&BooleanList=true&Timestamp=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A02Z&TimestampList=1970-01-01T00%3A00%3A03Z&Enum=Foo&EnumList=Foo&EnumList=Baz&EnumList=Bar&IntegerEnum=1&IntegerEnumList=1&IntegerEnumList=2", + "body": "" + } + }, + { + "id": "RestXmlQueryStringMap", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Handles query string maps", + "params": { + "queryParamsMapOfStrings": { + "QueryParamsStringKeyA": "Foo", + "QueryParamsStringKeyB": "Bar" + } + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?QueryParamsStringKeyA=Foo&QueryParamsStringKeyB=Bar", + "body": "" + } + }, + { + "id": "RestXmlQueryStringEscaping", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Handles escaping all required characters in the query string.", + "params": { + "queryString": " %:/?#[]@!$&'()*+,;=😹" + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?String=%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9", + "body": "" + } + }, + { + "id": "RestXmlSupportsNaNFloatQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Supports handling NaN float query values.", + "params": { + "queryFloat": "NaN", + "queryDouble": "NaN" + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Float=NaN&Double=NaN", + "body": "" + } + }, + { + "id": "RestXmlSupportsInfinityFloatQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Supports handling Infinity float query values.", + "params": { + "queryFloat": "Infinity", + "queryDouble": "Infinity" + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Float=Infinity&Double=Infinity", + "body": "" + } + }, + { + "id": "RestXmlSupportsNegativeInfinityFloatQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Supports handling -Infinity float query values.", + "params": { + "queryFloat": "-Infinity", + "queryDouble": "-Infinity" + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Float=-Infinity&Double=-Infinity", + "body": "" + } + }, + { + "id": "RestXmlZeroAndFalseQueryValues", + "given": { + "name": "AllQueryStringTypes", + "http": { + "method": "GET", + "requestUri": "/AllQueryStringTypesInput", + "responseCode": 200 + }, + "input": { + "shape": "AllQueryStringTypesInput" + }, + "documentation": "This example uses all query string types.
" + }, + "description": "Query values of 0 and false are serialized", + "params": { + "queryInteger": 0, + "queryBoolean": false + }, + "serialized": { + "method": "GET", + "uri": "/AllQueryStringTypesInput?Integer=0&Boolean=false", + "body": "" + } + } + ] + }, + { + "description": "Test cases for BodyWithXmlName operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "BodyWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName" + } + }, + "locationName": "Ahoy" + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "BodyWithXmlName", + "given": { + "name": "BodyWithXmlName", + "http": { + "method": "PUT", + "requestUri": "/BodyWithXmlName", + "responseCode": 200 + }, + "input": { + "shape": "BodyWithXmlNameInputOutput", + "locationName": "BodyWithXmlNameRequest" + }, + "documentation": "The following example serializes a body that uses an XML name, changing the wrapper name.
", + "idempotent": true + }, + "description": "Serializes a payload using a wrapper name based on the xmlName", + "params": { + "nested": { + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/BodyWithXmlName", + "body": "This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).
" + }, + "description": "Mixes constant and variable query string parameters", + "params": { + "baz": "bam" + }, + "serialized": { + "method": "GET", + "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam", + "body": "" + } + }, + { + "id": "ConstantAndVariableQueryStringAllValues", + "given": { + "name": "ConstantAndVariableQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantAndVariableQueryString?foo=bar", + "responseCode": 200 + }, + "input": { + "shape": "ConstantAndVariableQueryStringInput" + }, + "documentation": "This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).
" + }, + "description": "Mixes constant and variable query string parameters", + "params": { + "baz": "bam", + "maybeSet": "yes" + }, + "serialized": { + "method": "GET", + "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam&maybeSet=yes", + "body": "" + } + } + ] + }, + { + "description": "Test cases for ConstantQueryString operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "ConstantQueryStringInput": { + "type": "structure", + "required": [ + "hello" + ], + "members": { + "hello": { + "shape": "String", + "location": "uri", + "locationName": "hello" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "ConstantQueryString", + "given": { + "name": "ConstantQueryString", + "http": { + "method": "GET", + "requestUri": "/ConstantQueryString/{hello}?foo=bar&hello", + "responseCode": 200 + }, + "input": { + "shape": "ConstantQueryStringInput" + }, + "documentation": "This example uses a constant query string parameters and a label. This simply tests that labels and query string parameters are compatible. The fixed query string parameter named "hello" should in no way conflict with the label, {hello}
.
The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "Empty input serializes no payload", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/EmptyInputAndEmptyOutput", + "body": "" + } + } + ] + }, + { + "description": "Test cases for EndpointOperation operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestXmlEndpointTrait", + "given": { + "name": "EndpointOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointOperation", + "responseCode": 200 + }, + "endpoint": { + "hostPrefix": "foo." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait.", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/EndpointOperation", + "body": "", + "host": "foo.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelHeaderOperation operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HostLabelHeaderInput": { + "type": "structure", + "required": [ + "accountId" + ], + "members": { + "accountId": { + "shape": "String", + "hostLabel": true, + "location": "header", + "locationName": "X-Amz-Account-Id" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestXmlEndpointTraitWithHostLabelAndHttpBinding", + "given": { + "name": "EndpointWithHostLabelHeaderOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointWithHostLabelHeaderOperation", + "responseCode": 200 + }, + "input": { + "shape": "HostLabelHeaderInput" + }, + "endpoint": { + "hostPrefix": "{accountId}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input. The label must also\nbe serialized in into any other location it is bound to, such\nas the body or in this case an http header.", + "params": { + "accountId": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/EndpointWithHostLabelHeaderOperation", + "body": "", + "headers": { + "X-Amz-Account-Id": "bar" + }, + "host": "bar.example.com" + } + } + ], + "clientEndpoint": "https://example.com" + }, + { + "description": "Test cases for EndpointWithHostLabelOperation operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "EndpointWithHostLabelOperationRequest": { + "type": "structure", + "required": [ + "label" + ], + "members": { + "label": { + "shape": "String", + "hostLabel": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestXmlEndpointTraitWithHostLabel", + "given": { + "name": "EndpointWithHostLabelOperation", + "http": { + "method": "POST", + "requestUri": "/EndpointWithHostLabelOperation", + "responseCode": 200 + }, + "input": { + "shape": "EndpointWithHostLabelOperationRequest", + "locationName": "EndpointWithHostLabelOperationRequest" + }, + "endpoint": { + "hostPrefix": "foo.{label}." + } + }, + "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.", + "params": { + "label": "bar" + }, + "serialized": { + "method": "POST", + "uri": "/EndpointWithHostLabelOperation", + "body": "Flattened maps
" + }, + "description": "Serializes flattened XML maps in requests", + "params": { + "myMap": { + "foo": "Foo", + "baz": "Baz" + } + }, + "serialized": { + "method": "POST", + "uri": "/FlattenedXmlMap", + "body": "Flattened maps with @xmlName
" + }, + "description": "Serializes flattened XML maps in requests that have xmlName on members", + "params": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "serialized": { + "method": "POST", + "uri": "/FlattenedXmlMapWithXmlName", + "body": "This example serializes a blob shape in the payload.
In this example, no XML document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes a blob in the HTTP payload", + "params": { + "foo": "Foo", + "blob": "blobby blob blob" + }, + "serialized": { + "method": "POST", + "uri": "/HttpPayloadTraits", + "body": "blobby blob blob", + "headers": { + "X-Foo": "Foo" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "HttpPayloadTraitsWithNoBlobBody", + "given": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no XML document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes an empty blob in the HTTP payload", + "params": { + "foo": "Foo" + }, + "serialized": { + "method": "POST", + "uri": "/HttpPayloadTraits", + "body": "", + "headers": { + "X-Foo": "Foo" + } + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithMemberXmlName operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithMemberXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName", + "locationName": "Hola" + } + }, + "payload": "nested" + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "HttpPayloadWithMemberXmlName", + "given": { + "name": "HttpPayloadWithMemberXmlName", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithMemberXmlName", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithMemberXmlNameInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML name on the member, changing the wrapper name.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper name based on member xmlName", + "params": { + "nested": { + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithMemberXmlName", + "body": "This example serializes a structure in the payload.
Note that serializing a structure changes the wrapper element name to match the targeted structure.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload", + "params": { + "nested": { + "greeting": "hello", + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithStructure", + "body": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "Serializes a union in the payload.", + "params": { + "nested": { + "greeting": "hello" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithUnion", + "body": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "No payload is sent if the union has no value.", + "params": {}, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithUnion", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithXmlName operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName", + "locationName": "nested" + } + }, + "payload": "nested" + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "HttpPayloadWithXmlName", + "given": { + "name": "HttpPayloadWithXmlName", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithXmlName", + "responseCode": 200 + }, + "input": { + "shape": "HttpPayloadWithXmlNameInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML name, changing the wrapper name.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper name based on xmlName", + "params": { + "nested": { + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithXmlName", + "body": "The following example serializes a payload that uses an XML namespace.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper with an XML namespace", + "params": { + "nested": { + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithXmlNamespace", + "body": "The following example serializes a payload that uses an XML namespace.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper with an XML namespace", + "params": { + "nested": { + "name": "Phreddy" + } + }, + "serialized": { + "method": "PUT", + "uri": "/HttpPayloadWithXmlNamespaceAndPrefix", + "body": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "Adds headers by prefix", + "params": { + "foo": "Foo", + "fooMap": { + "abc": "Abc value", + "def": "Def value" + } + }, + "serialized": { + "method": "GET", + "uri": "/HttpPrefixHeaders", + "body": "", + "headers": { + "x-foo": "Foo", + "x-foo-abc": "Abc value", + "x-foo-def": "Def value" + } + } + }, + { + "id": "HttpPrefixHeadersAreNotPresent", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "input": { + "shape": "HttpPrefixHeadersInputOutput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "No prefix headers are serialized because the value is not present", + "params": { + "foo": "Foo", + "fooMap": {} + }, + "serialized": { + "method": "GET", + "uri": "/HttpPrefixHeaders", + "body": "", + "headers": { + "x-foo": "Foo" + } + } + }, + { + "id": "HttpPrefixEmptyHeaders", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "input": { + "shape": "HttpPrefixHeadersInputOutput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "Serialize prefix headers were the value is present but empty", + "params": { + "fooMap": { + "abc": "" + } + }, + "serialized": { + "method": "GET", + "uri": "/HttpPrefixHeaders", + "body": "", + "headers": { + "x-foo-abc": "" + } + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithFloatLabels operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithFloatLabelsInput": { + "type": "structure", + "required": [ + "float", + "double" + ], + "members": { + "float": { + "shape": "Float", + "location": "uri", + "locationName": "float" + }, + "double": { + "shape": "Double", + "location": "uri", + "locationName": "double" + } + } + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "RestXmlSupportsNaNFloatLabels", + "given": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "description": "Supports handling NaN float label values.", + "params": { + "float": "NaN", + "double": "NaN" + }, + "serialized": { + "method": "GET", + "uri": "/FloatHttpLabels/NaN/NaN", + "body": "" + } + }, + { + "id": "RestXmlSupportsInfinityFloatLabels", + "given": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "description": "Supports handling Infinity float label values.", + "params": { + "float": "Infinity", + "double": "Infinity" + }, + "serialized": { + "method": "GET", + "uri": "/FloatHttpLabels/Infinity/Infinity", + "body": "" + } + }, + { + "id": "RestXmlSupportsNegativeInfinityFloatLabels", + "given": { + "name": "HttpRequestWithFloatLabels", + "http": { + "method": "GET", + "requestUri": "/FloatHttpLabels/{float}/{double}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithFloatLabelsInput" + } + }, + "description": "Supports handling -Infinity float label values.", + "params": { + "float": "-Infinity", + "double": "-Infinity" + }, + "serialized": { + "method": "GET", + "uri": "/FloatHttpLabels/-Infinity/-Infinity", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithGreedyLabelInPath operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithGreedyLabelInPathInput": { + "type": "structure", + "required": [ + "foo", + "baz" + ], + "members": { + "foo": { + "shape": "String", + "location": "uri", + "locationName": "foo" + }, + "baz": { + "shape": "String", + "location": "uri", + "locationName": "baz" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "HttpRequestWithGreedyLabelInPath", + "given": { + "name": "HttpRequestWithGreedyLabelInPath", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithGreedyLabelInPath/foo/{foo}/baz/{baz+}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithGreedyLabelInPathInput" + } + }, + "description": "Serializes greedy labels and normal labels", + "params": { + "foo": "hello", + "baz": "there/guy" + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithGreedyLabelInPath/foo/hello/baz/there/guy", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithLabels operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithLabelsInput": { + "type": "structure", + "required": [ + "string", + "short", + "integer", + "long", + "float", + "double", + "boolean", + "timestamp" + ], + "members": { + "string": { + "shape": "String", + "location": "uri", + "locationName": "string" + }, + "short": { + "shape": "Integer", + "location": "uri", + "locationName": "short" + }, + "integer": { + "shape": "Integer", + "location": "uri", + "locationName": "integer" + }, + "long": { + "shape": "Long", + "location": "uri", + "locationName": "long" + }, + "float": { + "shape": "Float", + "location": "uri", + "locationName": "float" + }, + "double": { + "shape": "Double", + "location": "uri", + "locationName": "double" + }, + "boolean": { + "shape": "Boolean", + "documentation": "Serialized in the path as true or false.
", + "location": "uri", + "locationName": "boolean" + }, + "timestamp": { + "shape": "Timestamp", + "documentation": "Note that this member has no format, so it's serialized as an RFC 3399 date-time.
", + "location": "uri", + "locationName": "timestamp" + } + } + }, + "String": { + "type": "string" + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Timestamp": { + "type": "timestamp" + } + }, + "cases": [ + { + "id": "InputWithHeadersAndAllParams", + "given": { + "name": "HttpRequestWithLabels", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsInput" + }, + "documentation": "The example tests how requests are serialized when there's no input payload but there are HTTP labels.
" + }, + "description": "Sends a GET request that uses URI label bindings", + "params": { + "string": "string", + "short": 1, + "integer": 2, + "long": 3, + "float": 4.1, + "double": 5.1, + "boolean": true, + "timestamp": 1576540098 + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithLabels/string/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z", + "body": "" + } + }, + { + "id": "HttpRequestLabelEscaping", + "given": { + "name": "HttpRequestWithLabels", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsInput" + }, + "documentation": "The example tests how requests are serialized when there's no input payload but there are HTTP labels.
" + }, + "description": "Sends a GET request that uses URI label bindings", + "params": { + "string": " %:/?#[]@!$&'()*+,;=😹", + "short": 1, + "integer": 2, + "long": 3, + "float": 4.1, + "double": 5.1, + "boolean": true, + "timestamp": 1576540098 + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithLabels/%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpRequestWithLabelsAndTimestampFormat operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpRequestWithLabelsAndTimestampFormatInput": { + "type": "structure", + "required": [ + "memberEpochSeconds", + "memberHttpDate", + "memberDateTime", + "defaultFormat", + "targetEpochSeconds", + "targetHttpDate", + "targetDateTime" + ], + "members": { + "memberEpochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds", + "location": "uri", + "locationName": "memberEpochSeconds" + }, + "memberHttpDate": { + "shape": "SyntheticTimestamp_http_date", + "location": "uri", + "locationName": "memberHttpDate" + }, + "memberDateTime": { + "shape": "SyntheticTimestamp_date_time", + "location": "uri", + "locationName": "memberDateTime" + }, + "defaultFormat": { + "shape": "Timestamp", + "location": "uri", + "locationName": "defaultFormat" + }, + "targetEpochSeconds": { + "shape": "EpochSeconds", + "location": "uri", + "locationName": "targetEpochSeconds" + }, + "targetHttpDate": { + "shape": "HttpDate", + "location": "uri", + "locationName": "targetHttpDate" + }, + "targetDateTime": { + "shape": "DateTime", + "location": "uri", + "locationName": "targetDateTime" + } + } + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "Timestamp": { + "type": "timestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + } + }, + "cases": [ + { + "id": "HttpRequestWithLabelsAndTimestampFormat", + "given": { + "name": "HttpRequestWithLabelsAndTimestampFormat", + "http": { + "method": "GET", + "requestUri": "/HttpRequestWithLabelsAndTimestampFormat/{memberEpochSeconds}/{memberHttpDate}/{memberDateTime}/{defaultFormat}/{targetEpochSeconds}/{targetHttpDate}/{targetDateTime}", + "responseCode": 200 + }, + "input": { + "shape": "HttpRequestWithLabelsAndTimestampFormatInput" + }, + "documentation": "The example tests how requests serialize different timestamp formats in the URI path.
" + }, + "description": "Serializes different timestamp formats in URI labels", + "params": { + "memberEpochSeconds": 1576540098, + "memberHttpDate": 1576540098, + "memberDateTime": 1576540098, + "defaultFormat": 1576540098, + "targetEpochSeconds": 1576540098, + "targetHttpDate": 1576540098, + "targetDateTime": 1576540098 + }, + "serialized": { + "method": "GET", + "uri": "/HttpRequestWithLabelsAndTimestampFormat/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z/2019-12-16T23%3A48%3A18Z/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z", + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpStringPayload operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "StringPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "String" + } + }, + "payload": "payload" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestXmlStringPayloadRequest", + "given": { + "name": "HttpStringPayload", + "http": { + "method": "POST", + "requestUri": "/StringPayload", + "responseCode": 200 + }, + "input": { + "shape": "StringPayloadInput" + } + }, + "params": { + "payload": "rawstring" + }, + "serialized": { + "method": "POST", + "uri": "/StringPayload", + "body": "rawstring", + "headers": { + "Content-Type": "text/plain" + } + } + } + ] + }, + { + "description": "Test cases for InputAndOutputWithHeaders operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "InputAndOutputWithHeadersIO": { + "type": "structure", + "members": { + "headerString": { + "shape": "String", + "location": "header", + "locationName": "X-String" + }, + "headerByte": { + "shape": "Integer", + "location": "header", + "locationName": "X-Byte" + }, + "headerShort": { + "shape": "Integer", + "location": "header", + "locationName": "X-Short" + }, + "headerInteger": { + "shape": "Integer", + "location": "header", + "locationName": "X-Integer" + }, + "headerLong": { + "shape": "Long", + "location": "header", + "locationName": "X-Long" + }, + "headerFloat": { + "shape": "Float", + "location": "header", + "locationName": "X-Float" + }, + "headerDouble": { + "shape": "Double", + "location": "header", + "locationName": "X-Double" + }, + "headerTrueBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean1" + }, + "headerFalseBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean2" + }, + "headerStringList": { + "shape": "StringList", + "location": "header", + "locationName": "X-StringList" + }, + "headerStringSet": { + "shape": "StringSet", + "location": "header", + "locationName": "X-StringSet" + }, + "headerIntegerList": { + "shape": "IntegerList", + "location": "header", + "locationName": "X-IntegerList" + }, + "headerBooleanList": { + "shape": "BooleanList", + "location": "header", + "locationName": "X-BooleanList" + }, + "headerTimestampList": { + "shape": "TimestampList", + "location": "header", + "locationName": "X-TimestampList" + }, + "headerEnum": { + "shape": "FooEnum", + "location": "header", + "locationName": "X-Enum" + }, + "headerEnumList": { + "shape": "FooEnumList", + "location": "header", + "locationName": "X-EnumList" + } + } + }, + "String": { + "type": "string" + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "Timestamp": { + "type": "timestamp" + } + }, + "cases": [ + { + "id": "InputAndOutputWithStringHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with string header bindings", + "params": { + "headerString": "Hello", + "headerStringList": [ + "a", + "b", + "c" + ], + "headerStringSet": [ + "a", + "b", + "c" + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-String": "Hello", + "X-StringList": "a, b, c", + "X-StringSet": "a, b, c" + } + } + }, + { + "id": "InputAndOutputWithNumericHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with numeric header bindings", + "params": { + "headerByte": 1, + "headerShort": 123, + "headerInteger": 123, + "headerLong": 123, + "headerFloat": 1.1, + "headerDouble": 1.1, + "headerIntegerList": [ + 1, + 2, + 3 + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Byte": "1", + "X-Double": "1.1", + "X-Float": "1.1", + "X-Integer": "123", + "X-IntegerList": "1, 2, 3", + "X-Long": "123", + "X-Short": "123" + } + } + }, + { + "id": "InputAndOutputWithBooleanHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with boolean header bindings", + "params": { + "headerTrueBool": true, + "headerFalseBool": false, + "headerBooleanList": [ + true, + false, + true + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Boolean1": "true", + "X-Boolean2": "false", + "X-BooleanList": "true, false, true" + } + } + }, + { + "id": "InputAndOutputWithTimestampHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with timestamp header bindings", + "params": { + "headerTimestampList": [ + 1576540098, + 1576540098 + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT" + } + } + }, + { + "id": "InputAndOutputWithEnumHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests requests with enum header bindings", + "params": { + "headerEnum": "Foo", + "headerEnumList": [ + "Foo", + "Bar", + "Baz" + ] + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Enum": "Foo", + "X-EnumList": "Foo, Bar, Baz" + } + } + }, + { + "id": "RestXmlSupportsNaNFloatHeaderInputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling NaN float header values.", + "params": { + "headerFloat": "NaN", + "headerDouble": "NaN" + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Double": "NaN", + "X-Float": "NaN" + } + } + }, + { + "id": "RestXmlSupportsInfinityFloatHeaderInputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling Infinity float header values.", + "params": { + "headerFloat": "Infinity", + "headerDouble": "Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Double": "Infinity", + "X-Float": "Infinity" + } + } + }, + { + "id": "RestXmlSupportsNegativeInfinityFloatHeaderInputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "input": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling -Infinity float header values.", + "params": { + "headerFloat": "-Infinity", + "headerDouble": "-Infinity" + }, + "serialized": { + "method": "POST", + "uri": "/InputAndOutputWithHeaders", + "body": "", + "headers": { + "X-Double": "-Infinity", + "X-Float": "-Infinity" + } + } + } + ] + }, + { + "description": "Test cases for NestedXmlMaps operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "NestedXmlMapsRequest": { + "type": "structure", + "members": { + "nestedMap": { + "shape": "NestedMap" + }, + "flatNestedMap": { + "shape": "NestedMap", + "flattened": true + } + } + }, + "NestedMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnumMap" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "NestedXmlMapRequest", + "given": { + "name": "NestedXmlMaps", + "http": { + "method": "POST", + "requestUri": "/NestedXmlMaps", + "responseCode": 200 + }, + "input": { + "shape": "NestedXmlMapsRequest", + "locationName": "NestedXmlMapsRequest" + } + }, + "description": "Tests requests with nested maps.", + "params": { + "nestedMap": { + "foo": { + "bar": "Bar" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/NestedXmlMaps", + "body": "Nested Xml Maps with key/values with @xmlName
" + }, + "description": "Serializes nested XML Maps in requests that have xmlName on members", + "params": { + "nestedXmlMapWithXmlNameMap": { + "foo": { + "bar": "Baz", + "fizz": "Buzz" + }, + "qux": { + "foobar": "Bar", + "fizzbuzz": "Buzz" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/NestedXmlMapWithXmlName", + "body": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no payload", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/NoInputAndNoOutput", + "body": "" + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "NoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndOutputOutput", + "responseCode": 200 + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "No input serializes no payload", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/NoInputAndOutputOutput", + "body": "" + } + } + ] + }, + { + "description": "Test cases for NullAndEmptyHeadersClient operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "NullAndEmptyHeadersIO": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "location": "header", + "locationName": "X-A" + }, + "b": { + "shape": "String", + "location": "header", + "locationName": "X-B" + }, + "c": { + "shape": "StringList", + "location": "header", + "locationName": "X-C" + } + } + }, + "String": { + "type": "string" + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "NullAndEmptyHeaders", + "given": { + "name": "NullAndEmptyHeadersClient", + "http": { + "method": "GET", + "requestUri": "/NullAndEmptyHeadersClient", + "responseCode": 200 + }, + "input": { + "shape": "NullAndEmptyHeadersIO" + }, + "documentation": "Null headers are not sent over the wire, empty headers are serialized to ""
" + }, + "description": "Do not send null values, but do send empty strings and empty lists over the wire in headers", + "params": { + "a": null, + "b": "", + "c": [] + }, + "serialized": { + "method": "GET", + "uri": "/NullAndEmptyHeadersClient", + "body": "", + "headers": { + "X-B": "", + "X-C": "" + }, + "forbidHeaders": [ + "X-A" + ] + } + } + ] + }, + { + "description": "Test cases for OmitsNullSerializesEmptyString operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "OmitsNullSerializesEmptyStringInput": { + "type": "structure", + "members": { + "nullValue": { + "shape": "String", + "location": "querystring", + "locationName": "Null" + }, + "emptyString": { + "shape": "String", + "location": "querystring", + "locationName": "Empty" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestXmlOmitsNullQuery", + "given": { + "name": "OmitsNullSerializesEmptyString", + "http": { + "method": "GET", + "requestUri": "/OmitsNullSerializesEmptyString", + "responseCode": 200 + }, + "input": { + "shape": "OmitsNullSerializesEmptyStringInput" + }, + "documentation": "Omits null, but serializes empty string value.
" + }, + "description": "Omits null query values", + "params": { + "nullValue": null + }, + "serialized": { + "method": "GET", + "uri": "/OmitsNullSerializesEmptyString", + "body": "" + } + }, + { + "id": "RestXmlSerializesEmptyString", + "given": { + "name": "OmitsNullSerializesEmptyString", + "http": { + "method": "GET", + "requestUri": "/OmitsNullSerializesEmptyString", + "responseCode": 200 + }, + "input": { + "shape": "OmitsNullSerializesEmptyStringInput" + }, + "documentation": "Omits null, but serializes empty string value.
" + }, + "description": "Serializes empty query strings", + "params": { + "emptyString": "" + }, + "serialized": { + "method": "GET", + "uri": "/OmitsNullSerializesEmptyString?Empty=", + "body": "" + } + } + ] + }, + { + "description": "Test cases for PutWithContentEncoding operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "PutWithContentEncodingInput": { + "type": "structure", + "members": { + "encoding": { + "shape": "String", + "location": "header", + "locationName": "Content-Encoding" + }, + "data": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "SDKAppliedContentEncoding_restXml", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/requestcompression/putcontentwithencoding", + "responseCode": 200 + }, + "input": { + "shape": "PutWithContentEncodingInput", + "locationName": "PutWithContentEncodingRequest" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header.", + "params": { + "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n" + }, + "serialized": { + "method": "POST", + "uri": "/requestcompression/putcontentwithencoding", + "headers": { + "Content-Encoding": "gzip" + } + } + }, + { + "id": "SDKAppendedGzipAfterProvidedEncoding_restXml", + "given": { + "name": "PutWithContentEncoding", + "http": { + "method": "POST", + "requestUri": "/requestcompression/putcontentwithencoding", + "responseCode": 200 + }, + "input": { + "shape": "PutWithContentEncodingInput", + "locationName": "PutWithContentEncodingRequest" + }, + "requestcompression": { + "encodings": [ + "gzip" + ] + } + }, + "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is in the Content-Encoding header before the\nrequest compression encoding from the HTTP binding.\n", + "params": { + "encoding": "custom", + "data": "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\n" + }, + "serialized": { + "method": "POST", + "uri": "/requestcompression/putcontentwithencoding", + "headers": { + "Content-Encoding": "custom, gzip" + } + } + } + ] + }, + { + "description": "Test cases for QueryIdempotencyTokenAutoFill operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "QueryIdempotencyTokenAutoFillInput": { + "type": "structure", + "members": { + "token": { + "shape": "String", + "idempotencyToken": true, + "location": "querystring", + "locationName": "token" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "QueryIdempotencyTokenAutoFill", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/QueryIdempotencyTokenAutoFill", + "responseCode": 200 + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Automatically adds idempotency token when not set", + "params": {}, + "serialized": { + "method": "POST", + "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000", + "body": "" + } + }, + { + "id": "QueryIdempotencyTokenAutoFillIsSet", + "given": { + "name": "QueryIdempotencyTokenAutoFill", + "http": { + "method": "POST", + "requestUri": "/QueryIdempotencyTokenAutoFill", + "responseCode": 200 + }, + "input": { + "shape": "QueryIdempotencyTokenAutoFillInput" + }, + "documentation": "Automatically adds idempotency tokens.
" + }, + "description": "Uses the given idempotency token as-is", + "params": { + "token": "00000000-0000-4000-8000-000000000000" + }, + "serialized": { + "method": "POST", + "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000", + "body": "" + } + } + ] + }, + { + "description": "Test cases for QueryParamsAsStringListMap operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "QueryParamsAsStringListMapInput": { + "type": "structure", + "members": { + "qux": { + "shape": "String", + "location": "querystring", + "locationName": "corge" + }, + "foo": { + "shape": "StringListMap", + "location": "querystring" + } + } + }, + "String": { + "type": "string" + }, + "StringListMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringList" + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestXmlQueryParamsStringListMap", + "given": { + "name": "QueryParamsAsStringListMap", + "http": { + "method": "POST", + "requestUri": "/StringListMap", + "responseCode": 200 + }, + "input": { + "shape": "QueryParamsAsStringListMapInput" + } + }, + "description": "Serialize query params from map of list strings", + "params": { + "qux": "named", + "foo": { + "baz": [ + "bar", + "qux" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/StringListMap?corge=named&baz=bar&baz=qux", + "body": "" + } + } + ] + }, + { + "description": "Test cases for QueryPrecedence operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "QueryPrecedenceInput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "querystring", + "locationName": "bar" + }, + "baz": { + "shape": "StringMap", + "location": "querystring" + } + } + }, + "String": { + "type": "string" + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestXmlQueryPrecedence", + "given": { + "name": "QueryPrecedence", + "http": { + "method": "POST", + "requestUri": "/Precedence", + "responseCode": 200 + }, + "input": { + "shape": "QueryPrecedenceInput" + } + }, + "description": "Prefer named query parameters when serializing", + "params": { + "foo": "named", + "baz": { + "bar": "fromMap", + "qux": "alsoFromMap" + } + }, + "serialized": { + "method": "POST", + "uri": "/Precedence?bar=named&qux=alsoFromMap", + "body": "" + } + } + ] + }, + { + "description": "Test cases for RecursiveShapes operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "RecursiveShapesRequest": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesInputOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveShapesInputOutputNested2" + } + } + }, + "String": { + "type": "string" + }, + "RecursiveShapesInputOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + } + }, + "cases": [ + { + "id": "RecursiveShapes", + "given": { + "name": "RecursiveShapes", + "http": { + "method": "PUT", + "requestUri": "/RecursiveShapes", + "responseCode": 200 + }, + "input": { + "shape": "RecursiveShapesRequest", + "locationName": "RecursiveShapesRequest" + }, + "documentation": "Recursive shapes
", + "idempotent": true + }, + "description": "Serializes recursive structures", + "params": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "serialized": { + "method": "PUT", + "uri": "/RecursiveShapes", + "body": "The example tests how timestamp request and response headers are serialized.
" + }, + "description": "Tests how timestamp request headers are serialized", + "params": { + "memberEpochSeconds": 1576540098, + "memberHttpDate": 1576540098, + "memberDateTime": 1576540098, + "defaultFormat": 1576540098, + "targetEpochSeconds": 1576540098, + "targetHttpDate": 1576540098, + "targetDateTime": 1576540098 + }, + "serialized": { + "method": "POST", + "uri": "/TimestampFormatHeaders", + "body": "", + "headers": { + "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-memberDateTime": "2019-12-16T23:48:18Z", + "X-memberEpochSeconds": "1576540098", + "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-targetDateTime": "2019-12-16T23:48:18Z", + "X-targetEpochSeconds": "1576540098", + "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT" + } + } + } + ] + }, + { + "description": "Test cases for XmlAttributes operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "XmlAttributesRequest": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "attr": { + "shape": "String", + "locationName": "test", + "xmlAttribute": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "XmlAttributes", + "given": { + "name": "XmlAttributes", + "http": { + "method": "PUT", + "requestUri": "/XmlAttributes", + "responseCode": 200 + }, + "input": { + "shape": "XmlAttributesRequest", + "locationName": "XmlAttributesRequest" + }, + "documentation": "This example serializes an XML attributes on synthesized document.
", + "idempotent": true + }, + "description": "Serializes XML attributes on the synthesized document", + "params": { + "foo": "hi", + "attr": "test" + }, + "serialized": { + "method": "PUT", + "uri": "/XmlAttributes", + "body": "This example serializes an XML attributes on synthesized document.
", + "idempotent": true + }, + "description": "Serializes XML attributes with escaped characters on the synthesized document", + "params": { + "foo": "hi", + "attr": "This example serializes an XML attributes on a document targeted by httpPayload.
", + "idempotent": true + }, + "description": "Serializes XML attributes on the synthesized document", + "params": { + "payload": { + "foo": "hi", + "attr": "test" + } + }, + "serialized": { + "method": "PUT", + "uri": "/XmlAttributesOnPayload", + "body": "Blobs are base64 encoded
" + }, + "description": "Blobs are base64 encoded", + "params": { + "data": "value" + }, + "serialized": { + "method": "POST", + "uri": "/XmlBlobs", + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "XmlEmptyLists", + "given": { + "name": "XmlEmptyLists", + "http": { + "method": "PUT", + "requestUri": "/XmlEmptyLists", + "responseCode": 200 + }, + "input": { + "shape": "XmlEmptyListsRequest", + "locationName": "XmlEmptyListsRequest" + }, + "idempotent": true + }, + "description": "Serializes Empty XML lists", + "params": { + "stringList": [], + "stringSet": [] + }, + "serialized": { + "method": "PUT", + "uri": "/XmlEmptyLists", + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "params": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "serialized": { + "method": "PUT", + "uri": "/XmlEnums", + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "params": { + "intEnum1": 1, + "intEnum2": 2, + "intEnum3": 3, + "intEnumList": [ + 1, + 2 + ], + "intEnumSet": [ + 1, + 2 + ], + "intEnumMap": { + "a": 1, + "b": 2 + } + }, + "serialized": { + "method": "PUT", + "uri": "/XmlIntEnums", + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "XmlLists", + "given": { + "name": "XmlLists", + "http": { + "method": "PUT", + "requestUri": "/XmlLists", + "responseCode": 200 + }, + "input": { + "shape": "XmlListsRequest", + "locationName": "XmlListsRequest" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "description": "Tests for XML map serialization", + "params": { + "myMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/XmlMaps", + "body": "Maps with @xmlNamespace and @xmlName
" + }, + "description": "Serializes XML maps in requests that have xmlNamespace and xmlName on members", + "params": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "serialized": { + "method": "POST", + "uri": "/XmlMapWithXmlNamespace", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Tests how normal timestamps are serialized", + "params": { + "normal": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time works like normal timestamps", + "params": { + "dateTime": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps", + "params": { + "dateTimeOnTarget": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds works", + "params": { + "epochSeconds": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works", + "params": { + "epochSecondsOnTarget": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date works", + "params": { + "httpDate": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date on the target shape works", + "params": { + "httpDateOnTarget": 1398796238 + }, + "serialized": { + "method": "POST", + "uri": "/XmlTimestamps", + "body": "The example tests basic map serialization.
" + }, + "description": "Serializes maps", + "params": { + "denseStructMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "serialized": { + "method": "POST", + "uri": "/service/RpcV2Protocol/operation/RpcV2CborDenseMaps", + "body": "oW5kZW5zZVN0cnVjdE1hcKJjZm9voWJoaWV0aGVyZWNiYXqhYmhpY2J5ZQ==", + "headers": { + "Accept": "application/cbor", + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RpcV2CborSerializesZeroValuesInMaps", + "given": { + "name": "RpcV2CborDenseMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "RpcV2CborDenseMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Ensure that 0 and false are sent over the wire in all maps and lists", + "params": { + "denseNumberMap": { + "x": 0 + }, + "denseBooleanMap": { + "x": false + } + }, + "serialized": { + "method": "POST", + "uri": "/service/RpcV2Protocol/operation/RpcV2CborDenseMaps", + "body": "om5kZW5zZU51bWJlck1hcKFheABvZGVuc2VCb29sZWFuTWFwoWF49A==", + "headers": { + "Accept": "application/cbor", + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "requireHeaders": [ + "Content-Length" + ] + } + }, + { + "id": "RpcV2CborSerializesDenseSetMap", + "given": { + "name": "RpcV2CborDenseMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "RpcV2CborDenseMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "A request that contains a dense map of sets.", + "params": { + "denseSetMap": { + "x": [], + "y": [ + "a", + "b" + ] + } + }, + "serialized": { + "method": "POST", + "uri": "/service/RpcV2Protocol/operation/RpcV2CborDenseMaps", + "body": "oWtkZW5zZVNldE1hcKJheIBheYJhYWFi", + "headers": { + "Accept": "application/cbor", + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "requireHeaders": [ + "Content-Length" + ] + } + } + ] + }, + { + "description": "Test cases for RpcV2CborLists operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": { + "RpcV2CborListInputOutput": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "structureList": { + "shape": "StructureList" + }, + "blobList": { + "shape": "BlobList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember" + } + }, + "BlobList": { + "type": "list", + "member": { + "shape": "Blob" + } + }, + "Blob": { + "type": "blob" + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String" + }, + "b": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RpcV2CborLists", + "given": { + "name": "RpcV2CborLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "input": { + "shape": "RpcV2CborListInputOutput" + }, + "documentation": "This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output:
The example tests how requests and responses are serialized when there's no request or response members.
While this should be rare, code generators must support this.
" + }, + "description": "Empty output", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This operation has three possible return values:
This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "Ec2InvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
InvalidGreeting
\n This error is thrown when a request is invalid.
", + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "Ec2ComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
ComplexError
\n The xmlName trait on the output structure is ignored in AWS Query.
The wrapping element is always operation name + "Response".
" + }, + "description": "The xmlName trait on the output structure is ignored in the ec2 protocol", + "result": { + "foo": "bar" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "The example tests how requests and responses are serialized when there's no request payload or response members.
While this should be rare, code generators must support this.
" + }, + "description": "Empty output", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "Recursive shapes
" + }, + "description": "Serializes recursive structures", + "result": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "Blobs are base64 encoded
" + }, + "description": "Blobs are base64 encoded", + "result": { + "data": "value" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "Ec2XmlEmptyLists", + "given": { + "name": "XmlEmptyLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + } + }, + "description": "Deserializes empty XML lists", + "result": { + "stringList": [], + "stringSet": [] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
" + }, + "description": "Serializes simple scalar properties", + "result": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This example serializes intEnums as top level properties, in lists, sets, and maps.
" + }, + "description": "Serializes simple scalar properties", + "result": { + "intEnum1": 1, + "intEnum2": 2, + "intEnum3": 3, + "intEnumList": [ + 1, + 2 + ], + "intEnumSet": [ + 1, + 2 + ], + "intEnumMap": { + "a": 1, + "b": 2 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "Ec2XmlLists", + "given": { + "name": "XmlLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Tests how normal timestamps are serialized", + "result": { + "normal": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time works like normal timestamps", + "result": { + "dateTime": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps", + "result": { + "dateTimeOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds works", + "result": { + "epochSeconds": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works", + "result": { + "epochSecondsOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date works", + "result": { + "httpDate": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date on the target shape works", + "result": { + "httpDateOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml;charset=UTF-8" + }, + "body": "This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11InvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "InvalidGreeting" + } + ] + }, + "description": "Parses simple JSON errors", + "errorCode": "InvalidGreeting", + "errorMessage": "Hi", + "error": { + "Message": "Hi" + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"__type\": \"InvalidGreeting\",\n \"Message\": \"Hi\"\n}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "ComplexError": { + "type": "structure", + "members": { + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "AwsJson11ComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "description": "Parses a complex error with no message member", + "errorCode": "ComplexError", + "error": { + "TopLevel": "Top level", + "Nested": { + "Foo": "bar" + } + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"__type\": \"ComplexError\",\n \"TopLevel\": \"Top level\",\n \"Nested\": {\n \"Foo\": \"bar\"\n }\n}" + } + }, + { + "id": "AwsJson11EmptyComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "errorCode": "ComplexError", + "error": {}, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"__type\": \"ComplexError\"\n}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "FooError": { + "type": "structure", + "members": {}, + "documentation": "This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.
", + "exception": true, + "fault": true + } + }, + "cases": [ + { + "id": "AwsJson11FooErrorUsingXAmznErrorType", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Serializes the X-Amzn-ErrorType header. For an example service, see Amazon EKS.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "FooError" + } + } + }, + { + "id": "AwsJson11FooErrorUsingXAmznErrorTypeWithUri", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some X-Amzn-Errortype headers contain URLs. Clients need to split the URL on ':' and take only the first half of the string. For example, 'ValidationException:http://internal.amazon.com/coral/com.amazon.coral.validate/'\nis to be interpreted as 'ValidationException'.\n\nFor an example service see Amazon Polly.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/" + } + } + }, + { + "id": "AwsJson11FooErrorUsingXAmznErrorTypeWithUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "X-Amzn-Errortype might contain a URL and a namespace. Client should extract only the shape name. This is a pathalogical case that might not actually happen in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/" + } + } + }, + { + "id": "AwsJson11FooErrorUsingCode", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "This example uses the 'code' property in the output rather than X-Amzn-Errortype. Some services do this though it's preferable to send the X-Amzn-Errortype. Client implementations must first check for the X-Amzn-Errortype and then check for a top-level 'code' property.\n\nFor example service see Amazon S3 Glacier.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"code\": \"FooError\"\n}" + } + }, + { + "id": "AwsJson11FooErrorUsingCodeAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using code, and it might contain a namespace. Clients should just take the last part of the string after '#'.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"code\": \"aws.protocoltests.restjson#FooError\"\n}" + } + }, + { + "id": "AwsJson11FooErrorUsingCodeUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using code, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"code\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}" + } + }, + { + "id": "AwsJson11FooErrorWithDunderType", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"__type\": \"FooError\"\n}" + } + }, + { + "id": "AwsJson11FooErrorWithDunderTypeAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type, and it might contain a namespace. Clients should just take the last part of the string after '#'.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"__type\": \"aws.protocoltests.restjson#FooError\"\n}" + } + }, + { + "id": "AwsJson11FooErrorWithDunderTypeUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"__type\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}" + } + } + ] + }, + { + "description": "Test cases for JsonEnums operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "JsonEnumsInputOutput": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11Enums", + "given": { + "name": "JsonEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonEnumsInputOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"fooEnum1\": \"Foo\",\n \"fooEnum2\": \"0\",\n \"fooEnum3\": \"1\",\n \"fooEnumList\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumSet\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumMap\": {\n \"hi\": \"Foo\",\n \"zero\": \"0\"\n }\n}" + } + } + ] + }, + { + "description": "Test cases for JsonIntEnums operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "JsonIntEnumsInputOutput": { + "type": "structure", + "members": { + "intEnum1": { + "shape": "IntegerEnum" + }, + "intEnum2": { + "shape": "IntegerEnum" + }, + "intEnum3": { + "shape": "IntegerEnum" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "intEnumSet": { + "shape": "IntegerEnumSet" + }, + "intEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11IntEnums", + "given": { + "name": "JsonIntEnums", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonIntEnumsInputOutput" + }, + "documentation": "This example serializes intEnums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "intEnum1": 1, + "intEnum2": 2, + "intEnum3": 3, + "intEnumList": [ + 1, + 2 + ], + "intEnumSet": [ + 1, + 2 + ], + "intEnumMap": { + "a": 1, + "b": 2 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amz-Target": "JsonProtocol.JsonIntEnums" + }, + "body": "{\n \"intEnum1\": 1,\n \"intEnum2\": 2,\n \"intEnum3\": 3,\n \"intEnumList\": [\n 1,\n 2\n ],\n \"intEnumSet\": [\n 1,\n 2\n ],\n \"intEnumMap\": {\n \"a\": 1,\n \"b\": 2\n }\n}" + } + } + ] + }, + { + "description": "Test cases for JsonUnions operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "UnionInputOutput": { + "type": "structure", + "members": { + "contents": { + "shape": "MyUnion" + } + }, + "documentation": "A shared structure that contains a single union member.
" + }, + "MyUnion": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "numberValue": { + "shape": "Integer" + }, + "blobValue": { + "shape": "Blob" + }, + "timestampValue": { + "shape": "Timestamp" + }, + "enumValue": { + "shape": "FooEnum" + }, + "listValue": { + "shape": "StringList" + }, + "mapValue": { + "shape": "StringMap" + }, + "structureValue": { + "shape": "GreetingStruct" + } + }, + "documentation": "A union with a representative set of types for members.
", + "union": true + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Blob": { + "type": "blob" + }, + "Timestamp": { + "type": "timestamp" + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "AwsJson11DeserializeStringUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a string union value", + "result": { + "contents": { + "stringValue": "foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"stringValue\": \"foo\"\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeBooleanUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a boolean union value", + "result": { + "contents": { + "booleanValue": true + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"booleanValue\": true\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeNumberUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a number union value", + "result": { + "contents": { + "numberValue": 1 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"numberValue\": 1\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeBlobUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a blob union value", + "result": { + "contents": { + "blobValue": "foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"blobValue\": \"Zm9v\"\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeTimestampUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a timestamp union value", + "result": { + "contents": { + "timestampValue": 1398796238 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"timestampValue\": 1398796238\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes an enum union value", + "result": { + "contents": { + "enumValue": "Foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"enumValue\": \"Foo\"\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeListUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a list union value", + "result": { + "contents": { + "listValue": [ + "foo", + "bar" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"listValue\": [\"foo\", \"bar\"]\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeMapUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a map union value", + "result": { + "contents": { + "mapValue": { + "foo": "bar", + "spam": "eggs" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"mapValue\": {\n \"foo\": \"bar\",\n \"spam\": \"eggs\"\n }\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a structure union value", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + }, + { + "id": "AwsJson11DeserializeIgnoreType", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Ignores an unrecognized __type property", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"contents\": {\n \"__type\": \"aws.protocoltests.json10#MyUnion\",\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + } + ] + }, + { + "description": "Test cases for KitchenSinkOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "KitchenSink": { + "type": "structure", + "members": { + "Blob": { + "shape": "Blob" + }, + "Boolean": { + "shape": "Boolean" + }, + "Double": { + "shape": "Double" + }, + "EmptyStruct": { + "shape": "EmptyStruct" + }, + "Float": { + "shape": "Float" + }, + "HttpdateTimestamp": { + "shape": "SyntheticTimestamp_http_date" + }, + "Integer": { + "shape": "Integer" + }, + "Iso8601Timestamp": { + "shape": "SyntheticTimestamp_date_time" + }, + "JsonValue": { + "shape": "JsonValue", + "jsonvalue": true + }, + "ListOfLists": { + "shape": "ListOfListOfStrings" + }, + "ListOfMapsOfStrings": { + "shape": "ListOfMapsOfStrings" + }, + "ListOfStrings": { + "shape": "ListOfStrings" + }, + "ListOfStructs": { + "shape": "ListOfStructs" + }, + "Long": { + "shape": "Long" + }, + "MapOfListsOfStrings": { + "shape": "MapOfListsOfStrings" + }, + "MapOfMaps": { + "shape": "MapOfMapOfStrings" + }, + "MapOfStrings": { + "shape": "MapOfStrings" + }, + "MapOfStructs": { + "shape": "MapOfStructs" + }, + "RecursiveList": { + "shape": "ListOfKitchenSinks" + }, + "RecursiveMap": { + "shape": "MapOfKitchenSinks" + }, + "RecursiveStruct": { + "shape": "KitchenSink" + }, + "SimpleStruct": { + "shape": "SimpleStruct" + }, + "String": { + "shape": "String" + }, + "StructWithJsonName": { + "shape": "StructWithJsonName" + }, + "Timestamp": { + "shape": "Timestamp" + }, + "UnixTimestamp": { + "shape": "SyntheticTimestamp_epoch_seconds" + } + } + }, + "Blob": { + "type": "blob" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "EmptyStruct": { + "type": "structure", + "members": {} + }, + "Float": { + "type": "float", + "box": true + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "Integer": { + "type": "integer", + "box": true + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "JsonValue": { + "type": "string" + }, + "ListOfListOfStrings": { + "type": "list", + "member": { + "shape": "ListOfStrings" + } + }, + "ListOfMapsOfStrings": { + "type": "list", + "member": { + "shape": "MapOfStrings" + } + }, + "ListOfStrings": { + "type": "list", + "member": { + "shape": "String" + } + }, + "ListOfStructs": { + "type": "list", + "member": { + "shape": "SimpleStruct" + } + }, + "Long": { + "type": "long", + "box": true + }, + "MapOfListsOfStrings": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "ListOfStrings" + } + }, + "MapOfMapOfStrings": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "MapOfStrings" + } + }, + "MapOfStrings": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "MapOfStructs": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "SimpleStruct" + } + }, + "ListOfKitchenSinks": { + "type": "list", + "member": { + "shape": "KitchenSink" + } + }, + "MapOfKitchenSinks": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "KitchenSink" + } + }, + "SimpleStruct": { + "type": "structure", + "members": { + "Value": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + }, + "StructWithJsonName": { + "type": "structure", + "members": { + "Value": { + "shape": "String" + } + } + }, + "Timestamp": { + "type": "timestamp" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + } + }, + "cases": [ + { + "id": "parses_operations_with_empty_json_bodies", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses operations with empty JSON bodies", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{}" + } + }, + { + "id": "parses_string_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses string shapes", + "result": { + "String": "string-value" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"String\":\"string-value\"}" + } + }, + { + "id": "parses_integer_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses integer shapes", + "result": { + "Integer": 1234 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Integer\":1234}" + } + }, + { + "id": "parses_long_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses long shapes", + "result": { + "Long": 1234567890123456789 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Long\":1234567890123456789}" + } + }, + { + "id": "parses_float_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses float shapes", + "result": { + "Float": 1234.5 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Float\":1234.5}" + } + }, + { + "id": "parses_double_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses double shapes", + "result": { + "Double": 1.2345678912345679E8 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Double\":123456789.12345679}" + } + }, + { + "id": "parses_boolean_shapes_true", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses boolean shapes (true)", + "result": { + "Boolean": true + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Boolean\":true}" + } + }, + { + "id": "parses_boolean_false", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses boolean (false)", + "result": { + "Boolean": false + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Boolean\":false}" + } + }, + { + "id": "parses_blob_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses blob shapes", + "result": { + "Blob": "binary-value" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Blob\":\"YmluYXJ5LXZhbHVl\"}" + } + }, + { + "id": "parses_timestamp_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses timestamp shapes", + "result": { + "Timestamp": 946845296 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Timestamp\":946845296}" + } + }, + { + "id": "parses_iso8601_timestamps", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses iso8601 timestamps", + "result": { + "Iso8601Timestamp": 946845296 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"Iso8601Timestamp\":\"2000-01-02T20:34:56Z\"}" + } + }, + { + "id": "parses_httpdate_timestamps", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses httpdate timestamps", + "result": { + "HttpdateTimestamp": 946845296 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"HttpdateTimestamp\":\"Sun, 02 Jan 2000 20:34:56 GMT\"}" + } + }, + { + "id": "parses_list_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses list shapes", + "result": { + "ListOfStrings": [ + "abc", + "mno", + "xyz" + ] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"ListOfStrings\":[\"abc\",\"mno\",\"xyz\"]}" + } + }, + { + "id": "parses_list_of_map_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses list of map shapes", + "result": { + "ListOfMapsOfStrings": [ + { + "size": "large" + }, + { + "color": "red" + } + ] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"ListOfMapsOfStrings\":[{\"size\":\"large\"},{\"color\":\"red\"}]}" + } + }, + { + "id": "parses_list_of_list_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses list of list shapes", + "result": { + "ListOfLists": [ + [ + "abc", + "mno", + "xyz" + ], + [ + "hjk", + "qrs", + "tuv" + ] + ] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"ListOfLists\":[[\"abc\",\"mno\",\"xyz\"],[\"hjk\",\"qrs\",\"tuv\"]]}" + } + }, + { + "id": "parses_list_of_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses list of structure shapes", + "result": { + "ListOfStructs": [ + { + "Value": "value-1" + }, + { + "Value": "value-2" + } + ] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"ListOfStructs\":[{\"Value\":\"value-1\"},{\"Value\":\"value-2\"}]}" + } + }, + { + "id": "parses_list_of_recursive_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses list of recursive structure shapes", + "result": { + "RecursiveList": [ + { + "RecursiveList": [ + { + "RecursiveList": [ + { + "String": "value" + } + ] + } + ] + } + ] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"RecursiveList\":[{\"RecursiveList\":[{\"RecursiveList\":[{\"String\":\"value\"}]}]}]}" + } + }, + { + "id": "parses_map_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses map shapes", + "result": { + "MapOfStrings": { + "size": "large", + "color": "red" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"MapOfStrings\":{\"size\":\"large\",\"color\":\"red\"}}" + } + }, + { + "id": "parses_map_of_list_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses map of list shapes", + "result": { + "MapOfListsOfStrings": { + "sizes": [ + "large", + "small" + ], + "colors": [ + "red", + "green" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"MapOfListsOfStrings\":{\"sizes\":[\"large\",\"small\"],\"colors\":[\"red\",\"green\"]}}" + } + }, + { + "id": "parses_map_of_map_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses map of map shapes", + "result": { + "MapOfMaps": { + "sizes": { + "large": "L", + "medium": "M" + }, + "colors": { + "red": "R", + "blue": "B" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"MapOfMaps\":{\"sizes\":{\"large\":\"L\",\"medium\":\"M\"},\"colors\":{\"red\":\"R\",\"blue\":\"B\"}}}" + } + }, + { + "id": "parses_map_of_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses map of structure shapes", + "result": { + "MapOfStructs": { + "size": { + "Value": "small" + }, + "color": { + "Value": "red" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"MapOfStructs\":{\"size\":{\"Value\":\"small\"},\"color\":{\"Value\":\"red\"}}}" + } + }, + { + "id": "parses_map_of_recursive_structure_shapes", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses map of recursive structure shapes", + "result": { + "RecursiveMap": { + "key-1": { + "RecursiveMap": { + "key-2": { + "RecursiveMap": { + "key-3": { + "String": "value" + } + } + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\"RecursiveMap\":{\"key-1\":{\"RecursiveMap\":{\"key-2\":{\"RecursiveMap\":{\"key-3\":{\"String\":\"value\"}}}}}}}" + } + }, + { + "id": "parses_the_request_id_from_the_response", + "given": { + "name": "KitchenSinkOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "KitchenSink" + } + }, + "description": "Parses the request id from the response", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1", + "X-Amzn-Requestid": "amazon-uniq-request-id" + }, + "body": "{}" + } + } + ] + }, + { + "description": "Test cases for NullOperation operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "NullOperationInputOutput": { + "type": "structure", + "members": { + "string": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson11StructuresDontDeserializeNullValues", + "given": { + "name": "NullOperation", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "NullOperationInputOutput" + } + }, + "description": "Null structure values are dropped", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"string\": null\n}" + } + } + ] + }, + { + "description": "Test cases for PutAndGetInlineDocuments operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "PutAndGetInlineDocumentsInputOutput": { + "type": "structure", + "members": { + "inlineDocument": { + "shape": "Document" + } + } + }, + "Document": { + "type": "structure", + "members": {}, + "document": true + } + }, + "cases": [ + { + "id": "PutAndGetInlineDocumentsInput", + "given": { + "name": "PutAndGetInlineDocuments", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "PutAndGetInlineDocumentsInputOutput" + }, + "documentation": "This example serializes an inline document as part of the payload.
" + }, + "description": "Serializes inline documents in a JSON response.", + "result": { + "inlineDocument": { + "foo": "bar" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"inlineDocument\": {\"foo\": \"bar\"}\n}" + } + } + ] + }, + { + "description": "Test cases for SimpleScalarProperties operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2018-01-01", + "jsonVersion": "1.1", + "targetPrefix": "JsonProtocol" + }, + "shapes": { + "SimpleScalarPropertiesInputOutput": { + "type": "structure", + "members": { + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double" + } + } + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "AwsJson11SupportsNaNFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + } + }, + "description": "Supports handling NaN float values.", + "result": { + "floatValue": "NaN", + "doubleValue": "NaN" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"floatValue\": \"NaN\",\n \"doubleValue\": \"NaN\"\n}" + } + }, + { + "id": "AwsJson11SupportsInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + } + }, + "description": "Supports handling Infinity float values.", + "result": { + "floatValue": "Infinity", + "doubleValue": "Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"floatValue\": \"Infinity\",\n \"doubleValue\": \"Infinity\"\n}" + } + }, + { + "id": "AwsJson11SupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + } + }, + "description": "Supports handling -Infinity float values.", + "result": { + "floatValue": "-Infinity", + "doubleValue": "-Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.1" + }, + "body": "{\n \"floatValue\": \"-Infinity\",\n \"doubleValue\": \"-Infinity\"\n}" + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/output/json_1_0.json b/tools/code-generation/protocol-tests/output/json_1_0.json new file mode 100644 index 00000000000..920a8bebaef --- /dev/null +++ b/tools/code-generation/protocol-tests/output/json_1_0.json @@ -0,0 +1,1157 @@ +[ + { + "description": "Test cases for EmptyInputAndEmptyOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "EmptyInputAndEmptyOutputOutput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "AwsJson10EmptyInputAndEmptyOutputSendJsonObject", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "EmptyInputAndEmptyOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "A service will always return a JSON object for operations with modeled output.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "InvalidGreeting": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "documentation": "This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "AwsJson10InvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "InvalidGreeting" + } + ] + }, + "description": "Parses simple JSON errors", + "errorCode": "InvalidGreeting", + "errorMessage": "Hi", + "error": { + "Message": "Hi" + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"__type\": \"aws.protocoltests.json10#InvalidGreeting\",\n \"Message\": \"Hi\"\n}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "FooError": { + "type": "structure", + "members": {}, + "documentation": "This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.
", + "exception": true, + "fault": true + } + }, + "cases": [ + { + "id": "AwsJson10FooErrorUsingXAmznErrorType", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Serializes the X-Amzn-ErrorType header. For an example service, see Amazon EKS.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "FooError" + } + } + }, + { + "id": "AwsJson10FooErrorUsingXAmznErrorTypeWithUri", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some X-Amzn-Errortype headers contain URLs. Clients need to split the URL on ':' and take only the first half of the string. For example, 'ValidationException:http://internal.amazon.com/coral/com.amazon.coral.validate/'\nis to be interpreted as 'ValidationException'.\n\nFor an example service see Amazon Polly.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/" + } + } + }, + { + "id": "AwsJson10FooErrorUsingXAmznErrorTypeWithUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "X-Amzn-Errortype might contain a URL and a namespace. Client should extract only the shape name. This is a pathalogical case that might not actually happen in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "aws.protocoltests.json10#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/" + } + } + }, + { + "id": "AwsJson10FooErrorUsingCode", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "This example uses the 'code' property in the output rather than X-Amzn-Errortype. Some services do this though it's preferable to send the X-Amzn-Errortype. Client implementations must first check for the X-Amzn-Errortype and then check for a top-level 'code' property.\n\nFor example service see Amazon S3 Glacier.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"code\": \"FooError\"\n}" + } + }, + { + "id": "AwsJson10FooErrorUsingCodeAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using code, and it might contain a namespace. Clients should just take the last part of the string after '#'.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"code\": \"aws.protocoltests.json10#FooError\"\n}" + } + }, + { + "id": "AwsJson10FooErrorUsingCodeUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using code, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"code\": \"aws.protocoltests.json10#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}" + } + }, + { + "id": "AwsJson10FooErrorWithDunderType", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"__type\": \"FooError\"\n}" + } + }, + { + "id": "AwsJson10FooErrorWithDunderTypeAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type, and it might contain a namespace. Clients should just take the last part of the string after '#'.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"__type\": \"aws.protocoltests.json10#FooError\"\n}" + } + }, + { + "id": "AwsJson10FooErrorWithDunderTypeUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"__type\": \"aws.protocoltests.json10#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "ComplexError": { + "type": "structure", + "members": { + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "AwsJson10ComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "description": "Parses a complex error with no message member", + "errorCode": "ComplexError", + "error": { + "TopLevel": "Top level", + "Nested": { + "Foo": "bar" + } + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"__type\": \"aws.protocoltests.json10#ComplexError\",\n \"TopLevel\": \"Top level\",\n \"Nested\": {\n \"Foo\": \"bar\"\n }\n}" + } + }, + { + "id": "AwsJson10EmptyComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "description": "Parses a complex error with an empty body", + "errorCode": "ComplexError", + "error": {}, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"__type\": \"aws.protocoltests.json10#ComplexError\"\n}" + } + } + ] + }, + { + "description": "Test cases for JsonUnions operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "JsonUnionsOutput": { + "type": "structure", + "members": { + "contents": { + "shape": "MyUnion" + } + } + }, + "MyUnion": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "numberValue": { + "shape": "Integer" + }, + "blobValue": { + "shape": "Blob" + }, + "timestampValue": { + "shape": "Timestamp" + }, + "enumValue": { + "shape": "FooEnum" + }, + "intEnumValue": { + "shape": "IntegerEnum" + }, + "listValue": { + "shape": "StringList" + }, + "mapValue": { + "shape": "StringMap" + }, + "structureValue": { + "shape": "GreetingStruct" + } + }, + "documentation": "A union with a representative set of types for members.
", + "union": true + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Blob": { + "type": "blob" + }, + "Timestamp": { + "type": "timestamp" + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "AwsJson10DeserializeStringUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a string union value", + "result": { + "contents": { + "stringValue": "foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"stringValue\": \"foo\"\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeBooleanUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a boolean union value", + "result": { + "contents": { + "booleanValue": true + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"booleanValue\": true\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeNumberUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a number union value", + "result": { + "contents": { + "numberValue": 1 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"numberValue\": 1\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeBlobUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a blob union value", + "result": { + "contents": { + "blobValue": "foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"blobValue\": \"Zm9v\"\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeTimestampUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a timestamp union value", + "result": { + "contents": { + "timestampValue": 1398796238 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"timestampValue\": 1398796238\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes an enum union value", + "result": { + "contents": { + "enumValue": "Foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"enumValue\": \"Foo\"\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeIntEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes an intEnum union value", + "result": { + "contents": { + "intEnumValue": 1 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"intEnumValue\": 1\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeListUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a list union value", + "result": { + "contents": { + "listValue": [ + "foo", + "bar" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"listValue\": [\"foo\", \"bar\"]\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeMapUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a map union value", + "result": { + "contents": { + "mapValue": { + "foo": "bar", + "spam": "eggs" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"mapValue\": {\n \"foo\": \"bar\",\n \"spam\": \"eggs\"\n }\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a structure union value", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeIgnoreType", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Ignores an unrecognized __type property", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"__type\": \"aws.protocoltests.json10#MyUnion\",\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + }, + { + "id": "AwsJson10DeserializeAllowNulls", + "given": { + "name": "JsonUnions", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "JsonUnionsOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Allows for `: null` to be set for all unset fields", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"contents\": {\n \"stringValue\": null,\n \"booleanValue\": null,\n \"numberValue\": null,\n \"blobValue\": null,\n \"timestampValue\": null,\n \"enumValue\": null,\n \"intEnumValue\": null,\n \"listValue\": null,\n \"mapValue\": null,\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + } + ] + }, + { + "description": "Test cases for NoInputAndNoOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": {}, + "cases": [ + { + "id": "AwsJson10HandlesEmptyOutputShape", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "When no output is defined, the service is expected to return\nan empty payload, however, client must ignore a JSON payload\nif one is returned. This ensures that if output is added later,\nthen it will not break the client.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{}" + } + }, + { + "id": "AwsJson10HandlesUnexpectedJsonOutput", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "This client-only test builds on handles_empty_output_shape,\nby including unexpected fields in the JSON. A client\nneeds to ignore JSON output that is empty or that contains\nJSON object data.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"foo\": true\n}" + } + }, + { + "id": "AwsJson10ServiceRespondsWithNoPayload", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "When no output is defined, the service is expected to return\nan empty payload. Despite the lack of a payload, the service\nis expected to always send a Content-Type header. Clients must\nhandle cases where a service returns a JSON object and where\na service returns no JSON at all.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "AwsJson10NoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "Empty output always serializes an empty object payload.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{}" + } + } + ] + }, + { + "description": "Test cases for SimpleScalarProperties operation", + "metadata": { + "protocol": "json", + "protocols": [ + "json" + ], + "apiVersion": "2020-07-14", + "jsonVersion": "1.0", + "targetPrefix": "JsonRpc10" + }, + "shapes": { + "SimpleScalarPropertiesOutput": { + "type": "structure", + "members": { + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double" + } + } + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "AwsJson10SupportsNaNFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarPropertiesOutput" + } + }, + "description": "Supports handling NaN float values.", + "result": { + "floatValue": "NaN", + "doubleValue": "NaN" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"floatValue\": \"NaN\",\n \"doubleValue\": \"NaN\"\n}" + } + }, + { + "id": "AwsJson10SupportsInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarPropertiesOutput" + } + }, + "description": "Supports handling Infinity float values.", + "result": { + "floatValue": "Infinity", + "doubleValue": "Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"floatValue\": \"Infinity\",\n \"doubleValue\": \"Infinity\"\n}" + } + }, + { + "id": "AwsJson10SupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleScalarPropertiesOutput" + } + }, + "description": "Supports handling -Infinity float values.", + "result": { + "floatValue": "-Infinity", + "doubleValue": "-Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/x-amz-json-1.0" + }, + "body": "{\n \"floatValue\": \"-Infinity\",\n \"doubleValue\": \"-Infinity\"\n}" + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/output/query.json b/tools/code-generation/protocol-tests/output/query.json new file mode 100644 index 00000000000..8195a44957c --- /dev/null +++ b/tools/code-generation/protocol-tests/output/query.json @@ -0,0 +1,2375 @@ +[ + { + "description": "Test cases for DatetimeOffsets operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "DatetimeOffsetsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + } + }, + "cases": [ + { + "id": "AwsQueryDateTimeWithNegativeOffset", + "given": { + "name": "DatetimeOffsets", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "DatetimeOffsetsOutput" + } + }, + "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets", + "result": { + "datetime": 1576540098 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "The example tests how requests and responses are serialized when there's no request or response members.
While this should be rare, code generators must support this.
" + }, + "description": "Empty output", + "result": {}, + "response": { + "status_code": 200 + } + } + ] + }, + { + "description": "Test cases for FlattenedXmlMap operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "FlattenedXmlMapOutput": { + "type": "structure", + "members": { + "myMap": { + "shape": "FooEnumMap", + "flattened": true + } + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "QueryQueryFlattenedXmlMap", + "given": { + "name": "FlattenedXmlMap", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "FlattenedXmlMapOutput" + }, + "documentation": "Flattened maps
" + }, + "description": "Serializes flattened XML maps in responses", + "result": { + "myMap": { + "foo": "Foo", + "baz": "Baz" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "Flattened maps with @xmlName
" + }, + "description": "Serializes flattened XML maps in responses that have xmlName on members", + "result": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "Flattened maps with @xmlNamespace and @xmlName
" + }, + "description": "Serializes flattened XML maps in responses that have xmlNamespace and xmlName on members", + "result": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This operation has three possible return values:
This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "QueryInvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
InvalidGreeting
\n This operation has three possible return values:
Customized
\n This error is thrown when a request is invalid.
", + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "QueryComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
ComplexError
\n The xmlName trait on the output structure is ignored in AWS Query.
The wrapping element is always operation name + "Response", and inside of that wrapper is another wrapper named operation name + "Result".
" + }, + "description": "The xmlName trait on the output structure is ignored in AWS Query", + "result": { + "foo": "bar" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output.
While this should be rare, code generators must support this.
" + }, + "description": "Empty output. Note that no assertion is made on the output body itself.", + "result": {}, + "response": { + "status_code": 200 + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "QueryNoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request payload or response members.
While this should be rare, code generators must support this.
" + }, + "description": "Empty output", + "result": {}, + "response": { + "status_code": 200 + } + } + ] + }, + { + "description": "Test cases for RecursiveXmlShapes operation", + "metadata": { + "protocol": "query", + "protocols": [ + "query" + ], + "apiVersion": "2020-01-08" + }, + "shapes": { + "RecursiveXmlShapesOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveXmlShapesOutputNested1" + } + } + }, + "RecursiveXmlShapesOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveXmlShapesOutputNested2" + } + } + }, + "String": { + "type": "string" + }, + "RecursiveXmlShapesOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveXmlShapesOutputNested1" + } + } + } + }, + "cases": [ + { + "id": "QueryRecursiveShapes", + "given": { + "name": "RecursiveXmlShapes", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RecursiveXmlShapesOutput" + }, + "documentation": "Recursive shapes
" + }, + "description": "Serializes recursive structures", + "result": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "Blobs are base64 encoded
" + }, + "description": "Blobs are base64 encoded", + "result": { + "data": "value" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "QueryXmlEmptyLists", + "given": { + "name": "XmlEmptyLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + } + }, + "description": "Deserializes empty XML lists", + "result": { + "stringList": [], + "stringSet": [] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
" + }, + "description": "Serializes simple scalar properties", + "result": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
" + }, + "description": "Serializes simple scalar properties", + "result": { + "intEnum1": 1, + "intEnum2": 2, + "intEnum3": 3, + "intEnumList": [ + 1, + 2 + ], + "intEnumSet": [ + 1, + 2 + ], + "intEnumMap": { + "a": 1, + "b": 2 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "QueryXmlLists", + "given": { + "name": "XmlLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "XmlListsOutput" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "description": "Tests for XML map serialization", + "result": { + "myMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Tests how normal timestamps are serialized", + "result": { + "normal": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time works like normal timestamps", + "result": { + "dateTime": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps", + "result": { + "dateTimeOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds works", + "result": { + "epochSeconds": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works", + "result": { + "epochSecondsOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date works", + "result": { + "httpDate": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date on the target shape works", + "result": { + "httpDateOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/xml" + }, + "body": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Serializes documents as part of the JSON response payload with no escaping.", + "result": { + "stringValue": "string", + "documentValue": { + "foo": "bar" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": {\n \"foo\": \"bar\"\n }\n}" + } + }, + { + "id": "DocumentOutputString", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Document types can be JSON scalars too.", + "result": { + "stringValue": "string", + "documentValue": "hello" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": \"hello\"\n}" + } + }, + { + "id": "DocumentOutputNumber", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Document types can be JSON scalars too.", + "result": { + "stringValue": "string", + "documentValue": 10 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": 10\n}" + } + }, + { + "id": "DocumentOutputBoolean", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Document types can be JSON scalars too.", + "result": { + "stringValue": "string", + "documentValue": false + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": false\n}" + } + }, + { + "id": "DocumentOutputArray", + "given": { + "name": "DocumentType", + "http": { + "method": "PUT", + "requestUri": "/DocumentType", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeInputOutput" + }, + "documentation": "This example serializes a document as part of the payload.
", + "idempotent": true + }, + "description": "Document types can be JSON arrays.", + "result": { + "stringValue": "string", + "documentValue": [ + true, + false + ] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"stringValue\": \"string\",\n \"documentValue\": [\n true,\n false\n ]\n}" + } + } + ] + }, + { + "description": "Test cases for DocumentTypeAsMapValue operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "DocumentTypeAsMapValueInputOutput": { + "type": "structure", + "members": { + "docValuedMap": { + "shape": "DocumentValuedMap" + } + } + }, + "DocumentValuedMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "Document" + } + }, + "Document": { + "type": "structure", + "members": {}, + "document": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "DocumentTypeAsMapValueOutput", + "given": { + "name": "DocumentTypeAsMapValue", + "http": { + "method": "PUT", + "requestUri": "/DocumentTypeAsMapValue", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeAsMapValueInputOutput" + }, + "documentation": "This example serializes documents as the value of maps.
", + "idempotent": true + }, + "description": "Serializes a map that uses documents as the value.", + "result": { + "docValuedMap": { + "foo": { + "f": 1, + "o": 2 + }, + "bar": [ + "b", + "a", + "r" + ], + "baz": "BAZ" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"docValuedMap\": {\n \"foo\": { \"f\": 1, \"o\": 2 },\n \"bar\": [ \"b\", \"a\", \"r\" ],\n \"baz\": \"BAZ\"\n }\n}" + } + } + ] + }, + { + "description": "Test cases for DocumentTypeAsPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "DocumentTypeAsPayloadInputOutput": { + "type": "structure", + "members": { + "documentValue": { + "shape": "Document" + } + }, + "payload": "documentValue" + }, + "Document": { + "type": "structure", + "members": {}, + "document": true + } + }, + "cases": [ + { + "id": "DocumentTypeAsPayloadOutput", + "given": { + "name": "DocumentTypeAsPayload", + "http": { + "method": "PUT", + "requestUri": "/DocumentTypeAsPayload", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeAsPayloadInputOutput" + }, + "documentation": "This example serializes a document as the entire HTTP payload.
", + "idempotent": true + }, + "description": "Serializes a document as the target of the httpPayload trait.", + "result": { + "documentValue": { + "foo": "bar" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"foo\": \"bar\"\n}" + } + }, + { + "id": "DocumentTypeAsPayloadOutputString", + "given": { + "name": "DocumentTypeAsPayload", + "http": { + "method": "PUT", + "requestUri": "/DocumentTypeAsPayload", + "responseCode": 200 + }, + "output": { + "shape": "DocumentTypeAsPayloadInputOutput" + }, + "documentation": "This example serializes a document as the entire HTTP payload.
", + "idempotent": true + }, + "description": "Serializes a document as a payload string.", + "result": { + "documentValue": "hello" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "\"hello\"" + } + } + ] + }, + { + "description": "Test cases for EmptyInputAndEmptyOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "EmptyInputAndEmptyOutputOutput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "RestJsonEmptyInputAndEmptyOutput", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/EmptyInputAndEmptyOutput", + "responseCode": 200 + }, + "output": { + "shape": "EmptyInputAndEmptyOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "As of January 2021, server implementations are expected to\nrespond with a JSON object regardless of if the output\nparameters are empty.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{}" + } + }, + { + "id": "RestJsonEmptyInputAndEmptyOutputJsonObjectOutput", + "given": { + "name": "EmptyInputAndEmptyOutput", + "http": { + "method": "POST", + "requestUri": "/EmptyInputAndEmptyOutput", + "responseCode": 200 + }, + "output": { + "shape": "EmptyInputAndEmptyOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "This test ensures that clients can gracefully handle\nsituations where a service omits a JSON payload entirely.", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for FractionalSeconds operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "FractionalSecondsOutput": { + "type": "structure", + "members": { + "datetime": { + "shape": "DateTime" + } + } + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + } + }, + "cases": [ + { + "id": "RestJsonDateTimeWithFractionalSeconds", + "given": { + "name": "FractionalSeconds", + "http": { + "method": "POST", + "requestUri": "/FractionalSeconds", + "responseCode": 200 + }, + "output": { + "shape": "FractionalSecondsOutput" + } + }, + "description": "Ensures that clients can correctly parse datetime timestamps with fractional seconds", + "result": { + "datetime": 9.46845296123E8 + }, + "response": { + "status_code": 200, + "body": " {\n \"datetime\": \"2000-01-02T20:34:56.123Z\"\n }\n" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "GreetingWithErrorsOutput": { + "type": "structure", + "members": { + "greeting": { + "shape": "String", + "location": "header", + "locationName": "X-Greeting" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonGreetingWithErrors", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "output": { + "shape": "GreetingWithErrorsOutput" + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true + }, + "description": "Ensures that operations with errors successfully know how\nto deserialize a successful response. As of January 2021,\nserver implementations are expected to respond with a\nJSON object regardless of if the output parameters are\nempty.", + "result": { + "greeting": "Hello" + }, + "response": { + "status_code": 200, + "headers": { + "X-Greeting": "Hello" + }, + "body": "{}" + } + }, + { + "id": "RestJsonGreetingWithErrorsNoPayload", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "output": { + "shape": "GreetingWithErrorsOutput" + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true + }, + "description": "This test is similar to RestJsonGreetingWithErrors, but it\nensures that clients can gracefully deal with a server\nomitting a response payload.", + "result": { + "greeting": "Hello" + }, + "response": { + "status_code": 200, + "headers": { + "X-Greeting": "Hello" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "FooError": { + "type": "structure", + "members": {}, + "documentation": "This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.
", + "error": { + "httpStatusCode": 500 + }, + "exception": true, + "fault": true + } + }, + "cases": [ + { + "id": "RestJsonFooErrorUsingXAmznErrorType", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Serializes the X-Amzn-ErrorType header. For an example service, see Amazon EKS.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "FooError" + } + } + }, + { + "id": "RestJsonFooErrorUsingXAmznErrorTypeWithUri", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some X-Amzn-Errortype headers contain URLs. Clients need to split the URL on ':' and take only the first half of the string. For example, 'ValidationException:http://internal.amazon.com/coral/com.amazon.coral.validate/'\nis to be interpreted as 'ValidationException'.\n\nFor an example service see Amazon Polly.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/" + } + } + }, + { + "id": "RestJsonFooErrorUsingXAmznErrorTypeWithUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "X-Amzn-Errortype might contain a URL and a namespace. Client should extract only the shape name. This is a pathalogical case that might not actually happen in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "X-Amzn-Errortype": "aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/" + } + } + }, + { + "id": "RestJsonFooErrorUsingCode", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "This example uses the 'code' property in the output rather than X-Amzn-Errortype. Some services do this though it's preferable to send the X-Amzn-Errortype. Client implementations must first check for the X-Amzn-Errortype and then check for a top-level 'code' property.\n\nFor example service see Amazon S3 Glacier.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"code\": \"FooError\"\n}" + } + }, + { + "id": "RestJsonFooErrorUsingCodeAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using code, and it might contain a namespace. Clients should just take the last part of the string after '#'.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"code\": \"aws.protocoltests.restjson#FooError\"\n}" + } + }, + { + "id": "RestJsonFooErrorUsingCodeUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using code, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"code\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}" + } + }, + { + "id": "RestJsonFooErrorWithDunderType", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"__type\": \"FooError\"\n}" + } + }, + { + "id": "RestJsonFooErrorWithDunderTypeAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type, and it might contain a namespace. Clients should just take the last part of the string after '#'.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"__type\": \"aws.protocoltests.restjson#FooError\"\n}" + } + }, + { + "id": "RestJsonFooErrorWithDunderTypeUriAndNamespace", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "FooError" + } + ] + }, + "description": "Some services serialize errors using __type, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.", + "errorCode": "FooError", + "error": {}, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"__type\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "ComplexError": { + "type": "structure", + "members": { + "Header": { + "shape": "String", + "location": "header", + "locationName": "X-Header" + }, + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "error": { + "httpStatusCode": 403, + "senderFault": true + }, + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String", + "locationName": "Fooooo" + } + } + } + }, + "cases": [ + { + "id": "RestJsonComplexErrorWithNoMessage", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "description": "Serializes a complex error with no message member", + "errorCode": "ComplexError", + "error": { + "Header": "Header", + "TopLevel": "Top level", + "Nested": { + "Foo": "bar" + } + }, + "response": { + "status_code": 403, + "headers": { + "Content-Type": "application/json", + "X-Amzn-Errortype": "ComplexError", + "X-Header": "Header" + }, + "body": "{\n \"TopLevel\": \"Top level\",\n \"Nested\": {\n \"Fooooo\": \"bar\"\n }\n}" + } + }, + { + "id": "RestJsonEmptyComplexErrorWithNoMessage", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "errorCode": "ComplexError", + "error": {}, + "response": { + "status_code": 403, + "headers": { + "Content-Type": "application/json", + "X-Amzn-Errortype": "ComplexError" + }, + "body": "{}" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "InvalidGreeting": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "documentation": "This error is thrown when an invalid greeting value is provided.
", + "error": { + "httpStatusCode": 400, + "senderFault": true + }, + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonInvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has four possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "InvalidGreeting" + } + ] + }, + "description": "Parses simple JSON errors", + "errorCode": "InvalidGreeting", + "errorMessage": "Hi", + "error": { + "Message": "Hi" + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/json", + "X-Amzn-Errortype": "InvalidGreeting" + }, + "body": "{\n \"Message\": \"Hi\"\n}" + } + } + ] + }, + { + "description": "Test cases for HttpEnumPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "EnumPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "StringEnum" + } + }, + "payload": "payload" + }, + "StringEnum": { + "type": "string", + "enum": [ + "enumvalue" + ] + } + }, + "cases": [ + { + "id": "RestJsonEnumPayloadResponse", + "given": { + "name": "HttpEnumPayload", + "http": { + "method": "POST", + "requestUri": "/EnumPayload", + "responseCode": 200 + }, + "output": { + "shape": "EnumPayloadInput" + } + }, + "result": { + "payload": "enumvalue" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/plain" + }, + "body": "enumvalue" + } + } + ] + }, + { + "description": "Test cases for HttpPayloadTraits operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadTraitsInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "blob": { + "shape": "Blob" + } + }, + "payload": "blob" + }, + "String": { + "type": "string" + }, + "Blob": { + "type": "blob" + } + }, + "cases": [ + { + "id": "RestJsonHttpPayloadTraitsWithBlob", + "given": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no JSON document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes a blob in the HTTP payload", + "result": { + "foo": "Foo", + "blob": "blobby blob blob" + }, + "response": { + "status_code": 200, + "headers": { + "X-Foo": "Foo" + }, + "body": "blobby blob blob" + } + }, + { + "id": "RestJsonHttpPayloadTraitsWithNoBlobBody", + "given": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no JSON document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes an empty blob in the HTTP payload", + "result": { + "foo": "Foo" + }, + "response": { + "status_code": 200, + "headers": { + "X-Foo": "Foo" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithStructure operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithStructureInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "NestedPayload" + } + }, + "payload": "nested" + }, + "NestedPayload": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + }, + "name": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpPayloadWithStructure", + "given": { + "name": "HttpPayloadWithStructure", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithStructure", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadWithStructureInputOutput" + }, + "documentation": "This example serializes a structure in the payload.
Note that serializing a structure changes the wrapper element name to match the targeted structure.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload", + "result": { + "nested": { + "greeting": "hello", + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"greeting\": \"hello\",\n \"name\": \"Phreddy\"\n}" + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithUnion operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithUnionInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "UnionPayload" + } + }, + "payload": "nested" + }, + "UnionPayload": { + "type": "structure", + "members": { + "greeting": { + "shape": "String" + } + }, + "union": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonHttpPayloadWithUnion", + "given": { + "name": "HttpPayloadWithUnion", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithUnion", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadWithUnionInputOutput" + }, + "documentation": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "Serializes a union in the payload.", + "result": { + "nested": { + "greeting": "hello" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"greeting\": \"hello\"\n}" + } + }, + { + "id": "RestJsonHttpPayloadWithUnsetUnion", + "given": { + "name": "HttpPayloadWithUnion", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithUnion", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadWithUnionInputOutput" + }, + "documentation": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "No payload is sent if the union has no value.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Length": "0" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpPrefixHeaders operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPrefixHeadersOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "x-foo" + }, + "fooMap": { + "shape": "StringMap", + "location": "headers", + "locationName": "x-foo-" + } + } + }, + "String": { + "type": "string" + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + } + }, + "cases": [ + { + "id": "RestJsonHttpPrefixHeadersArePresent", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "output": { + "shape": "HttpPrefixHeadersOutput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "Adds headers by prefix", + "result": { + "foo": "Foo", + "fooMap": { + "abc": "Abc value", + "def": "Def value" + } + }, + "response": { + "status_code": 200, + "headers": { + "x-foo": "Foo", + "x-foo-abc": "Abc value", + "x-foo-def": "Def value" + } + } + } + ] + }, + { + "description": "Test cases for HttpPrefixHeadersInResponse operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPrefixHeadersInResponseOutput": { + "type": "structure", + "members": { + "prefixHeaders": { + "shape": "StringMap", + "location": "headers", + "locationName": "" + } + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "HttpPrefixHeadersResponse", + "given": { + "name": "HttpPrefixHeadersInResponse", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeadersResponse", + "responseCode": 200 + }, + "output": { + "shape": "HttpPrefixHeadersInResponseOutput" + }, + "documentation": "Clients that perform this test extract all headers from the response.
" + }, + "description": "(de)serializes all response headers", + "result": { + "prefixHeaders": { + "x-foo": "Foo", + "hello": "Hello" + } + }, + "response": { + "status_code": 200, + "headers": { + "hello": "Hello", + "x-foo": "Foo" + } + } + } + ] + }, + { + "description": "Test cases for HttpResponseCode operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpResponseCodeOutput": { + "type": "structure", + "members": { + "Status": { + "shape": "Integer", + "location": "statusCode" + } + } + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonHttpResponseCode", + "given": { + "name": "HttpResponseCode", + "http": { + "method": "PUT", + "requestUri": "/HttpResponseCode", + "responseCode": 200 + }, + "output": { + "shape": "HttpResponseCodeOutput" + }, + "idempotent": true + }, + "description": "Binds the http response code to an output structure. Note that\neven though all members are bound outside of the payload, an\nempty JSON object is serialized in the response. However,\nclients should be able to handle an empty JSON object or an\nempty payload without failing to deserialize a response.", + "result": { + "Status": 201 + }, + "response": { + "status_code": 201, + "headers": { + "Content-Type": "application/json" + }, + "body": "{}" + } + }, + { + "id": "RestJsonHttpResponseCodeWithNoPayload", + "given": { + "name": "HttpResponseCode", + "http": { + "method": "PUT", + "requestUri": "/HttpResponseCode", + "responseCode": 200 + }, + "output": { + "shape": "HttpResponseCodeOutput" + }, + "idempotent": true + }, + "description": "This test ensures that clients gracefully handle cases where\nthe service responds with no payload rather than an empty JSON\nobject.", + "result": { + "Status": 201 + }, + "response": { + "status_code": 201, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpStringPayload operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "StringPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "String" + } + }, + "payload": "payload" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonStringPayloadResponse", + "given": { + "name": "HttpStringPayload", + "http": { + "method": "POST", + "requestUri": "/StringPayload", + "responseCode": 200 + }, + "output": { + "shape": "StringPayloadInput" + } + }, + "result": { + "payload": "rawstring" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/plain" + }, + "body": "rawstring" + } + } + ] + }, + { + "description": "Test cases for IgnoreQueryParamsInResponse operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "IgnoreQueryParamsInResponseOutput": { + "type": "structure", + "members": { + "baz": { + "shape": "String", + "location": "uri", + "locationName": "baz" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonIgnoreQueryParamsInResponse", + "given": { + "name": "IgnoreQueryParamsInResponse", + "http": { + "method": "GET", + "requestUri": "/IgnoreQueryParamsInResponse", + "responseCode": 200 + }, + "output": { + "shape": "IgnoreQueryParamsInResponseOutput" + }, + "documentation": "This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.
" + }, + "description": "Query parameters must be ignored when serializing the output\nof an operation. As of January 2021, server implementations\nare expected to respond with a JSON object regardless of\nif the output parameters are empty.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{}" + } + }, + { + "id": "RestJsonIgnoreQueryParamsInResponseNoPayload", + "given": { + "name": "IgnoreQueryParamsInResponse", + "http": { + "method": "GET", + "requestUri": "/IgnoreQueryParamsInResponse", + "responseCode": 200 + }, + "output": { + "shape": "IgnoreQueryParamsInResponseOutput" + }, + "documentation": "This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.
" + }, + "description": "This test is similar to RestJsonIgnoreQueryParamsInResponse,\nbut it ensures that clients gracefully handle responses from\nthe server that do not serialize an empty JSON object.", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for InputAndOutputWithHeaders operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "InputAndOutputWithHeadersIO": { + "type": "structure", + "members": { + "headerString": { + "shape": "String", + "location": "header", + "locationName": "X-String" + }, + "headerByte": { + "shape": "Integer", + "location": "header", + "locationName": "X-Byte" + }, + "headerShort": { + "shape": "Integer", + "location": "header", + "locationName": "X-Short" + }, + "headerInteger": { + "shape": "Integer", + "location": "header", + "locationName": "X-Integer" + }, + "headerLong": { + "shape": "Long", + "location": "header", + "locationName": "X-Long" + }, + "headerFloat": { + "shape": "Float", + "location": "header", + "locationName": "X-Float" + }, + "headerDouble": { + "shape": "Double", + "location": "header", + "locationName": "X-Double" + }, + "headerTrueBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean1" + }, + "headerFalseBool": { + "shape": "Boolean", + "location": "header", + "locationName": "X-Boolean2" + }, + "headerStringList": { + "shape": "StringList", + "location": "header", + "locationName": "X-StringList" + }, + "headerStringSet": { + "shape": "StringSet", + "location": "header", + "locationName": "X-StringSet" + }, + "headerIntegerList": { + "shape": "IntegerList", + "location": "header", + "locationName": "X-IntegerList" + }, + "headerBooleanList": { + "shape": "BooleanList", + "location": "header", + "locationName": "X-BooleanList" + }, + "headerTimestampList": { + "shape": "TimestampList", + "location": "header", + "locationName": "X-TimestampList" + }, + "headerEnum": { + "shape": "FooEnum", + "location": "header", + "locationName": "X-Enum" + }, + "headerEnumList": { + "shape": "FooEnumList", + "location": "header", + "locationName": "X-EnumList" + }, + "headerIntegerEnum": { + "shape": "IntegerEnum", + "location": "header", + "locationName": "X-IntegerEnum" + }, + "headerIntegerEnumList": { + "shape": "IntegerEnumList", + "location": "header", + "locationName": "X-IntegerEnumList" + } + } + }, + "String": { + "type": "string" + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "Timestamp": { + "type": "timestamp" + } + }, + "cases": [ + { + "id": "RestJsonInputAndOutputWithStringHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with string header bindings", + "result": { + "headerString": "Hello", + "headerStringList": [ + "a", + "b", + "c" + ], + "headerStringSet": [ + "a", + "b", + "c" + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-String": "Hello", + "X-StringList": "a, b, c", + "X-StringSet": "a, b, c" + } + } + }, + { + "id": "RestJsonInputAndOutputWithQuotedStringHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with string list header bindings that require quoting", + "result": { + "headerStringList": [ + "b,c", + "\"def\"", + "a" + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-StringList": "\"b,c\", \"\\\"def\\\"\", a" + } + } + }, + { + "id": "RestJsonInputAndOutputWithNumericHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with numeric header bindings", + "result": { + "headerByte": 1, + "headerShort": 123, + "headerInteger": 123, + "headerLong": 123, + "headerFloat": 1.1, + "headerDouble": 1.1, + "headerIntegerList": [ + 1, + 2, + 3 + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-Byte": "1", + "X-Double": "1.1", + "X-Float": "1.1", + "X-Integer": "123", + "X-IntegerList": "1, 2, 3", + "X-Long": "123", + "X-Short": "123" + } + } + }, + { + "id": "RestJsonInputAndOutputWithBooleanHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with boolean header bindings", + "result": { + "headerTrueBool": true, + "headerFalseBool": false, + "headerBooleanList": [ + true, + false, + true + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-Boolean1": "true", + "X-Boolean2": "false", + "X-BooleanList": "true, false, true" + } + } + }, + { + "id": "RestJsonInputAndOutputWithTimestampHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with timestamp header bindings", + "result": { + "headerTimestampList": [ + 1576540098, + 1576540098 + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT" + } + } + }, + { + "id": "RestJsonInputAndOutputWithEnumHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with enum header bindings", + "result": { + "headerEnum": "Foo", + "headerEnumList": [ + "Foo", + "Bar", + "Baz" + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-Enum": "Foo", + "X-EnumList": "Foo, Bar, Baz" + } + } + }, + { + "id": "RestJsonInputAndOutputWithIntEnumHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with intEnum header bindings", + "result": { + "headerIntegerEnum": 1, + "headerIntegerEnumList": [ + 1, + 2, + 3 + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-IntegerEnum": "1", + "X-IntegerEnumList": "1, 2, 3" + } + } + }, + { + "id": "RestJsonSupportsNaNFloatHeaderOutputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling NaN float header values.", + "result": { + "headerFloat": "NaN", + "headerDouble": "NaN" + }, + "response": { + "status_code": 200, + "headers": { + "X-Double": "NaN", + "X-Float": "NaN" + } + } + }, + { + "id": "RestJsonSupportsInfinityFloatHeaderOutputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling Infinity float header values.", + "result": { + "headerFloat": "Infinity", + "headerDouble": "Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "X-Double": "Infinity", + "X-Float": "Infinity" + } + } + }, + { + "id": "RestJsonSupportsNegativeInfinityFloatHeaderOutputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling -Infinity float header values.", + "result": { + "headerFloat": "-Infinity", + "headerDouble": "-Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "X-Double": "-Infinity", + "X-Float": "-Infinity" + } + } + } + ] + }, + { + "description": "Test cases for JsonBlobs operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonBlobsInputOutput": { + "type": "structure", + "members": { + "data": { + "shape": "Blob" + } + } + }, + "Blob": { + "type": "blob" + } + }, + "cases": [ + { + "id": "RestJsonJsonBlobs", + "given": { + "name": "JsonBlobs", + "http": { + "method": "POST", + "requestUri": "/JsonBlobs", + "responseCode": 200 + }, + "output": { + "shape": "JsonBlobsInputOutput" + }, + "documentation": "Blobs are base64 encoded
" + }, + "description": "Blobs are base64 encoded", + "result": { + "data": "value" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"data\": \"dmFsdWU=\"\n}" + } + } + ] + }, + { + "description": "Test cases for JsonEnums operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonEnumsInputOutput": { + "type": "structure", + "members": { + "fooEnum1": { + "shape": "FooEnum" + }, + "fooEnum2": { + "shape": "FooEnum" + }, + "fooEnum3": { + "shape": "FooEnum" + }, + "fooEnumList": { + "shape": "FooEnumList" + }, + "fooEnumSet": { + "shape": "FooEnumSet" + }, + "fooEnumMap": { + "shape": "FooEnumMap" + } + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumSet": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonJsonEnums", + "given": { + "name": "JsonEnums", + "http": { + "method": "PUT", + "requestUri": "/JsonEnums", + "responseCode": 200 + }, + "output": { + "shape": "JsonEnumsInputOutput" + }, + "documentation": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"fooEnum1\": \"Foo\",\n \"fooEnum2\": \"0\",\n \"fooEnum3\": \"1\",\n \"fooEnumList\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumSet\": [\n \"Foo\",\n \"0\"\n ],\n \"fooEnumMap\": {\n \"hi\": \"Foo\",\n \"zero\": \"0\"\n }\n}" + } + } + ] + }, + { + "description": "Test cases for JsonIntEnums operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonIntEnumsInputOutput": { + "type": "structure", + "members": { + "integerEnum1": { + "shape": "IntegerEnum" + }, + "integerEnum2": { + "shape": "IntegerEnum" + }, + "integerEnum3": { + "shape": "IntegerEnum" + }, + "integerEnumList": { + "shape": "IntegerEnumList" + }, + "integerEnumSet": { + "shape": "IntegerEnumSet" + }, + "integerEnumMap": { + "shape": "IntegerEnumMap" + } + } + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumSet": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "IntegerEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "IntegerEnum" + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestJsonJsonIntEnums", + "given": { + "name": "JsonIntEnums", + "http": { + "method": "PUT", + "requestUri": "/JsonIntEnums", + "responseCode": 200 + }, + "output": { + "shape": "JsonIntEnumsInputOutput" + }, + "documentation": "This example serializes intEnums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes intEnums as integers", + "result": { + "integerEnum1": 1, + "integerEnum2": 2, + "integerEnum3": 3, + "integerEnumList": [ + 1, + 2, + 3 + ], + "integerEnumSet": [ + 1, + 2 + ], + "integerEnumMap": { + "abc": 1, + "def": 2 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"integerEnum1\": 1,\n \"integerEnum2\": 2,\n \"integerEnum3\": 3,\n \"integerEnumList\": [\n 1,\n 2,\n 3\n ],\n \"integerEnumSet\": [\n 1,\n 2\n ],\n \"integerEnumMap\": {\n \"abc\": 1,\n \"def\": 2\n }\n}" + } + } + ] + }, + { + "description": "Test cases for JsonLists operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonListsInputOutput": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "structureList": { + "shape": "StructureList", + "locationName": "myStructureList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonLists", + "given": { + "name": "JsonLists", + "http": { + "method": "PUT", + "requestUri": "/JsonLists", + "responseCode": 200 + }, + "output": { + "shape": "JsonListsInputOutput" + }, + "documentation": "This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "description": "Deserializes JSON maps", + "result": { + "denseStructMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"denseStructMap\": {\n \"foo\": {\n \"hi\": \"there\"\n },\n \"baz\": {\n \"hi\": \"bye\"\n }\n }\n}" + } + }, + { + "id": "RestJsonDeserializesZeroValuesInMaps", + "given": { + "name": "JsonMaps", + "http": { + "method": "POST", + "requestUri": "/JsonMaps", + "responseCode": 200 + }, + "output": { + "shape": "JsonMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Ensure that 0 and false are sent over the wire in all maps and lists", + "result": { + "denseNumberMap": { + "x": 0 + }, + "denseBooleanMap": { + "x": false + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"denseNumberMap\": {\n \"x\": 0\n },\n \"denseBooleanMap\": {\n \"x\": false\n }\n}" + } + }, + { + "id": "RestJsonDeserializesDenseSetMap", + "given": { + "name": "JsonMaps", + "http": { + "method": "POST", + "requestUri": "/JsonMaps", + "responseCode": 200 + }, + "output": { + "shape": "JsonMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "A response that contains a dense map of sets.", + "result": { + "denseSetMap": { + "x": [], + "y": [ + "a", + "b" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"denseSetMap\": {\n \"x\": [],\n \"y\": [\"a\", \"b\"]\n }\n}" + } + }, + { + "id": "RestJsonDeserializesDenseSetMapAndSkipsNull", + "given": { + "name": "JsonMaps", + "http": { + "method": "POST", + "requestUri": "/JsonMaps", + "responseCode": 200 + }, + "output": { + "shape": "JsonMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Clients SHOULD tolerate seeing a null value in a dense map, and they SHOULD\ndrop the null key-value pair.", + "result": { + "denseSetMap": { + "x": [], + "y": [ + "a", + "b" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"denseSetMap\": {\n \"x\": [],\n \"y\": [\"a\", \"b\"],\n \"z\": null\n }\n}" + } + } + ] + }, + { + "description": "Test cases for JsonTimestamps operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "JsonTimestampsInputOutput": { + "type": "structure", + "members": { + "normal": { + "shape": "Timestamp" + }, + "dateTime": { + "shape": "SyntheticTimestamp_date_time" + }, + "dateTimeOnTarget": { + "shape": "DateTime" + }, + "epochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds" + }, + "epochSecondsOnTarget": { + "shape": "EpochSeconds" + }, + "httpDate": { + "shape": "SyntheticTimestamp_http_date" + }, + "httpDateOnTarget": { + "shape": "HttpDate" + } + } + }, + "Timestamp": { + "type": "timestamp" + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + } + }, + "cases": [ + { + "id": "RestJsonJsonTimestamps", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Tests how normal timestamps are serialized", + "result": { + "normal": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"normal\": 1398796238\n}" + } + }, + { + "id": "RestJsonJsonTimestampsWithDateTimeFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time works like normal timestamps", + "result": { + "dateTime": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"dateTime\": \"2014-04-29T18:30:38Z\"\n}" + } + }, + { + "id": "RestJsonJsonTimestampsWithDateTimeOnTargetFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps", + "result": { + "dateTimeOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"dateTimeOnTarget\": \"2014-04-29T18:30:38Z\"\n}" + } + }, + { + "id": "RestJsonJsonTimestampsWithEpochSecondsFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds works", + "result": { + "epochSeconds": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"epochSeconds\": 1398796238\n}" + } + }, + { + "id": "RestJsonJsonTimestampsWithEpochSecondsOnTargetFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works", + "result": { + "epochSecondsOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"epochSecondsOnTarget\": 1398796238\n}" + } + }, + { + "id": "RestJsonJsonTimestampsWithHttpDateFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date works", + "result": { + "httpDate": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"httpDate\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}" + } + }, + { + "id": "RestJsonJsonTimestampsWithHttpDateOnTargetFormat", + "given": { + "name": "JsonTimestamps", + "http": { + "method": "POST", + "requestUri": "/JsonTimestamps", + "responseCode": 200 + }, + "output": { + "shape": "JsonTimestampsInputOutput" + }, + "documentation": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date on the target shape works", + "result": { + "httpDateOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"httpDateOnTarget\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}" + } + } + ] + }, + { + "description": "Test cases for JsonUnions operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "UnionInputOutput": { + "type": "structure", + "members": { + "contents": { + "shape": "MyUnion" + } + }, + "documentation": "A shared structure that contains a single union member.
" + }, + "MyUnion": { + "type": "structure", + "members": { + "stringValue": { + "shape": "String" + }, + "booleanValue": { + "shape": "Boolean" + }, + "numberValue": { + "shape": "Integer" + }, + "blobValue": { + "shape": "Blob" + }, + "timestampValue": { + "shape": "Timestamp" + }, + "enumValue": { + "shape": "FooEnum" + }, + "listValue": { + "shape": "StringList" + }, + "mapValue": { + "shape": "StringMap" + }, + "structureValue": { + "shape": "GreetingStruct" + }, + "renamedStructureValue": { + "shape": "RenamedGreeting" + } + }, + "documentation": "A union with a representative set of types for members.
", + "union": true + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Blob": { + "type": "blob" + }, + "Timestamp": { + "type": "timestamp" + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + }, + "RenamedGreeting": { + "type": "structure", + "members": { + "salutation": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "RestJsonDeserializeStringUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a string union value", + "result": { + "contents": { + "stringValue": "foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"stringValue\": \"foo\"\n }\n}" + } + }, + { + "id": "RestJsonDeserializeBooleanUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a boolean union value", + "result": { + "contents": { + "booleanValue": true + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"booleanValue\": true\n }\n}" + } + }, + { + "id": "RestJsonDeserializeNumberUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a number union value", + "result": { + "contents": { + "numberValue": 1 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"numberValue\": 1\n }\n}" + } + }, + { + "id": "RestJsonDeserializeBlobUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a blob union value", + "result": { + "contents": { + "blobValue": "foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"blobValue\": \"Zm9v\"\n }\n}" + } + }, + { + "id": "RestJsonDeserializeTimestampUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a timestamp union value", + "result": { + "contents": { + "timestampValue": 1398796238 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"timestampValue\": 1398796238\n }\n}" + } + }, + { + "id": "RestJsonDeserializeEnumUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes an enum union value", + "result": { + "contents": { + "enumValue": "Foo" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"enumValue\": \"Foo\"\n }\n}" + } + }, + { + "id": "RestJsonDeserializeListUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a list union value", + "result": { + "contents": { + "listValue": [ + "foo", + "bar" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"listValue\": [\"foo\", \"bar\"]\n }\n}" + } + }, + { + "id": "RestJsonDeserializeMapUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a map union value", + "result": { + "contents": { + "mapValue": { + "foo": "bar", + "spam": "eggs" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"mapValue\": {\n \"foo\": \"bar\",\n \"spam\": \"eggs\"\n }\n }\n}" + } + }, + { + "id": "RestJsonDeserializeStructureUnionValue", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Deserializes a structure union value", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + }, + { + "id": "RestJsonDeserializeIgnoreType", + "given": { + "name": "JsonUnions", + "http": { + "method": "PUT", + "requestUri": "/JsonUnions", + "responseCode": 200 + }, + "output": { + "shape": "UnionInputOutput" + }, + "documentation": "This operation uses unions for inputs and outputs.
", + "idempotent": true + }, + "description": "Ignores an unrecognized __type property", + "result": { + "contents": { + "structureValue": { + "hi": "hello" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"contents\": {\n \"__type\": \"aws.protocoltests.json10#MyUnion\",\n \"structureValue\": {\n \"hi\": \"hello\"\n }\n }\n}" + } + } + ] + }, + { + "description": "Test cases for MediaTypeHeader operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "MediaTypeHeaderOutput": { + "type": "structure", + "members": { + "json": { + "shape": "JsonValue", + "jsonvalue": true, + "location": "header", + "locationName": "X-Json" + } + } + }, + "JsonValue": { + "type": "string" + } + }, + "cases": [ + { + "id": "MediaTypeHeaderOutputBase64", + "given": { + "name": "MediaTypeHeader", + "http": { + "method": "GET", + "requestUri": "/MediaTypeHeader", + "responseCode": 200 + }, + "output": { + "shape": "MediaTypeHeaderOutput" + }, + "documentation": "This example ensures that mediaType strings are base64 encoded in headers.
" + }, + "description": "Headers that target strings with a mediaType are base64 encoded", + "result": { + "json": "true" + }, + "response": { + "status_code": 200, + "headers": { + "X-Json": "dHJ1ZQ==" + } + } + } + ] + }, + { + "description": "Test cases for NoInputAndNoOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonNoInputAndNoOutput", + "given": { + "name": "NoInputAndNoOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndNoOutput", + "responseCode": 200 + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "When an operation does not define output, the service will respond\nwith an empty payload, and may optionally include the content-type\nheader.", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "RestJsonNoInputAndOutputWithJson", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndOutputOutput", + "responseCode": 200 + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "Operations that define output and do not bind anything to\nthe payload return a JSON object in the response.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{}" + } + }, + { + "id": "RestJsonNoInputAndOutputNoPayload", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndOutputOutput", + "responseCode": 200 + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "This test is similar to RestJsonNoInputAndOutputWithJson, but\nit ensures that clients can gracefully handle responses that\nomit a JSON payload.", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for PostUnionWithJsonName operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "PostUnionWithJsonNameOutput": { + "type": "structure", + "required": [ + "value" + ], + "members": { + "value": { + "shape": "UnionWithJsonName" + } + } + }, + "UnionWithJsonName": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "locationName": "FOO" + }, + "bar": { + "shape": "String" + }, + "baz": { + "shape": "String", + "locationName": "_baz" + } + }, + "union": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "PostUnionWithJsonNameResponse1", + "given": { + "name": "PostUnionWithJsonName", + "http": { + "method": "POST", + "requestUri": "/PostUnionWithJsonName", + "responseCode": 200 + }, + "output": { + "shape": "PostUnionWithJsonNameOutput" + }, + "documentation": "This operation defines a union that uses jsonName on some members.
" + }, + "description": "Tests that jsonName works with union members.", + "result": { + "value": { + "foo": "hi" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"value\": {\n \"FOO\": \"hi\"\n }\n}" + } + }, + { + "id": "PostUnionWithJsonNameResponse2", + "given": { + "name": "PostUnionWithJsonName", + "http": { + "method": "POST", + "requestUri": "/PostUnionWithJsonName", + "responseCode": 200 + }, + "output": { + "shape": "PostUnionWithJsonNameOutput" + }, + "documentation": "This operation defines a union that uses jsonName on some members.
" + }, + "description": "Tests that jsonName works with union members.", + "result": { + "value": { + "baz": "hi" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"value\": {\n \"_baz\": \"hi\"\n }\n}" + } + }, + { + "id": "PostUnionWithJsonNameResponse3", + "given": { + "name": "PostUnionWithJsonName", + "http": { + "method": "POST", + "requestUri": "/PostUnionWithJsonName", + "responseCode": 200 + }, + "output": { + "shape": "PostUnionWithJsonNameOutput" + }, + "documentation": "This operation defines a union that uses jsonName on some members.
" + }, + "description": "Tests that jsonName works with union members.", + "result": { + "value": { + "bar": "hi" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"value\": {\n \"bar\": \"hi\"\n }\n}" + } + } + ] + }, + { + "description": "Test cases for RecursiveShapes operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "RecursiveShapesInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesInputOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveShapesInputOutputNested2" + } + } + }, + "String": { + "type": "string" + }, + "RecursiveShapesInputOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + } + }, + "cases": [ + { + "id": "RestJsonRecursiveShapes", + "given": { + "name": "RecursiveShapes", + "http": { + "method": "PUT", + "requestUri": "/RecursiveShapes", + "responseCode": 200 + }, + "output": { + "shape": "RecursiveShapesInputOutput" + }, + "documentation": "Recursive shapes
", + "idempotent": true + }, + "description": "Serializes recursive structures", + "result": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"nested\": {\n \"foo\": \"Foo1\",\n \"nested\": {\n \"bar\": \"Bar1\",\n \"recursiveMember\": {\n \"foo\": \"Foo2\",\n \"nested\": {\n \"bar\": \"Bar2\"\n }\n }\n }\n }\n}" + } + } + ] + }, + { + "description": "Test cases for SimpleScalarProperties operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "SimpleScalarPropertiesInputOutput": { + "type": "structure", + "members": { + "foo": { + "shape": "String", + "location": "header", + "locationName": "X-Foo" + }, + "stringValue": { + "shape": "String" + }, + "trueBooleanValue": { + "shape": "Boolean" + }, + "falseBooleanValue": { + "shape": "Boolean" + }, + "byteValue": { + "shape": "Integer" + }, + "shortValue": { + "shape": "Integer" + }, + "integerValue": { + "shape": "Integer" + }, + "longValue": { + "shape": "Long" + }, + "floatValue": { + "shape": "Float" + }, + "doubleValue": { + "shape": "Double", + "locationName": "DoubleDribble" + } + } + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "Long": { + "type": "long", + "box": true + }, + "Float": { + "type": "float", + "box": true + }, + "Double": { + "type": "double", + "box": true + } + }, + "cases": [ + { + "id": "RestJsonSimpleScalarProperties", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "foo": "Foo", + "stringValue": "string", + "trueBooleanValue": true, + "falseBooleanValue": false, + "byteValue": 1, + "shortValue": 2, + "integerValue": 3, + "longValue": 4, + "floatValue": 5.5, + "doubleValue": 6.5 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "X-Foo": "Foo" + }, + "body": "{\n \"stringValue\": \"string\",\n \"trueBooleanValue\": true,\n \"falseBooleanValue\": false,\n \"byteValue\": 1,\n \"shortValue\": 2,\n \"integerValue\": 3,\n \"longValue\": 4,\n \"floatValue\": 5.5,\n \"DoubleDribble\": 6.5\n}" + } + }, + { + "id": "RestJsonDoesntDeserializeNullStructureValues", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Rest Json should not deserialize null structure values", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"stringValue\": null\n}" + } + }, + { + "id": "RestJsonSupportsNaNFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Supports handling NaN float values.", + "result": { + "floatValue": "NaN", + "doubleValue": "NaN" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"floatValue\": \"NaN\",\n \"DoubleDribble\": \"NaN\"\n}" + } + }, + { + "id": "RestJsonSupportsInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Supports handling Infinity float values.", + "result": { + "floatValue": "Infinity", + "doubleValue": "Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"floatValue\": \"Infinity\",\n \"DoubleDribble\": \"Infinity\"\n}" + } + }, + { + "id": "RestJsonSupportsNegativeInfinityFloatInputs", + "given": { + "name": "SimpleScalarProperties", + "http": { + "method": "PUT", + "requestUri": "/SimpleScalarProperties", + "responseCode": 200 + }, + "output": { + "shape": "SimpleScalarPropertiesInputOutput" + }, + "idempotent": true + }, + "description": "Supports handling -Infinity float values.", + "result": { + "floatValue": "-Infinity", + "doubleValue": "-Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/json" + }, + "body": "{\n \"floatValue\": \"-Infinity\",\n \"DoubleDribble\": \"-Infinity\"\n}" + } + } + ] + }, + { + "description": "Test cases for TimestampFormatHeaders operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "TimestampFormatHeadersIO": { + "type": "structure", + "members": { + "memberEpochSeconds": { + "shape": "SyntheticTimestamp_epoch_seconds", + "location": "header", + "locationName": "X-memberEpochSeconds" + }, + "memberHttpDate": { + "shape": "SyntheticTimestamp_http_date", + "location": "header", + "locationName": "X-memberHttpDate" + }, + "memberDateTime": { + "shape": "SyntheticTimestamp_date_time", + "location": "header", + "locationName": "X-memberDateTime" + }, + "defaultFormat": { + "shape": "Timestamp", + "location": "header", + "locationName": "X-defaultFormat" + }, + "targetEpochSeconds": { + "shape": "EpochSeconds", + "location": "header", + "locationName": "X-targetEpochSeconds" + }, + "targetHttpDate": { + "shape": "HttpDate", + "location": "header", + "locationName": "X-targetHttpDate" + }, + "targetDateTime": { + "shape": "DateTime", + "location": "header", + "locationName": "X-targetDateTime" + } + } + }, + "SyntheticTimestamp_epoch_seconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "SyntheticTimestamp_http_date": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "SyntheticTimestamp_date_time": { + "type": "timestamp", + "timestampFormat": "iso8601" + }, + "Timestamp": { + "type": "timestamp" + }, + "EpochSeconds": { + "type": "timestamp", + "timestampFormat": "unixTimestamp" + }, + "HttpDate": { + "type": "timestamp", + "timestampFormat": "rfc822" + }, + "DateTime": { + "type": "timestamp", + "timestampFormat": "iso8601" + } + }, + "cases": [ + { + "id": "RestJsonTimestampFormatHeaders", + "given": { + "name": "TimestampFormatHeaders", + "http": { + "method": "POST", + "requestUri": "/TimestampFormatHeaders", + "responseCode": 200 + }, + "output": { + "shape": "TimestampFormatHeadersIO" + }, + "documentation": "This example tests how timestamp request and response headers are serialized.
" + }, + "description": "Tests how timestamp response headers are serialized", + "result": { + "memberEpochSeconds": 1576540098, + "memberHttpDate": 1576540098, + "memberDateTime": 1576540098, + "defaultFormat": 1576540098, + "targetEpochSeconds": 1576540098, + "targetHttpDate": 1576540098, + "targetDateTime": 1576540098 + }, + "response": { + "status_code": 200, + "headers": { + "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-memberDateTime": "2019-12-16T23:48:18Z", + "X-memberEpochSeconds": "1576540098", + "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-targetDateTime": "2019-12-16T23:48:18Z", + "X-targetEpochSeconds": "1576540098", + "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT" + } + } + } + ] + }, + { + "description": "Test cases for UnitInputAndOutput operation", + "metadata": { + "protocol": "rest-json", + "protocols": [ + "rest-json" + ], + "apiVersion": "2019-12-16" + }, + "shapes": {}, + "cases": [ + { + "id": "RestJsonUnitInputAndOutputNoOutput", + "given": { + "name": "UnitInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/UnitInputAndOutput", + "responseCode": 200 + }, + "documentation": "This test is similar to NoInputAndNoOutput, but uses explicit Unit types.
" + }, + "description": "When an operation defines Unit output, the service will respond\nwith an empty payload, and may optionally include the content-type\nheader.", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + } +] diff --git a/tools/code-generation/protocol-tests/output/rest-xml.json b/tools/code-generation/protocol-tests/output/rest-xml.json new file mode 100644 index 00000000000..c048fedfe8a --- /dev/null +++ b/tools/code-generation/protocol-tests/output/rest-xml.json @@ -0,0 +1,4627 @@ +[ + { + "description": "Test cases for BodyWithXmlName operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "BodyWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName" + } + }, + "locationName": "Ahoy" + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "BodyWithXmlName", + "given": { + "name": "BodyWithXmlName", + "http": { + "method": "PUT", + "requestUri": "/BodyWithXmlName", + "responseCode": 200 + }, + "output": { + "shape": "BodyWithXmlNameInputOutput" + }, + "documentation": "The following example serializes a body that uses an XML name, changing the wrapper name.
", + "idempotent": true + }, + "description": "Serializes a payload using a wrapper name based on the xmlName", + "result": { + "nested": { + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.
" + }, + "description": "Empty output serializes no payload", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for FlattenedXmlMap operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "FlattenedXmlMapResponse": { + "type": "structure", + "members": { + "myMap": { + "shape": "FooEnumMap", + "flattened": true + } + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "FlattenedXmlMap", + "given": { + "name": "FlattenedXmlMap", + "http": { + "method": "POST", + "requestUri": "/FlattenedXmlMap", + "responseCode": 200 + }, + "output": { + "shape": "FlattenedXmlMapResponse" + }, + "documentation": "Flattened maps
" + }, + "description": "Serializes flattened XML maps in responses", + "result": { + "myMap": { + "foo": "Foo", + "baz": "Baz" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Flattened maps with @xmlName
" + }, + "description": "Serializes flattened XML maps in responses that have xmlName on members", + "result": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Flattened maps with @xmlNamespace and @xmlName
" + }, + "description": "Serializes flattened XML maps in responses that have xmlNamespace and xmlName on members", + "result": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true + }, + "description": "Ensures that operations with errors successfully know how to deserialize the successful response", + "result": { + "greeting": "Hello" + }, + "response": { + "status_code": 200, + "headers": { + "X-Greeting": "Hello" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "InvalidGreeting": { + "type": "structure", + "members": { + "Message": { + "shape": "String" + } + }, + "documentation": "This error is thrown when an invalid greeting value is provided.
", + "error": { + "httpStatusCode": 400, + "senderFault": true + }, + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "InvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "InvalidGreeting" + } + ] + }, + "description": "Parses simple XML errors", + "errorCode": "InvalidGreeting", + "errorMessage": "Hi", + "error": { + "Message": "Hi" + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/xml" + }, + "body": "InvalidGreeting
\n This error is thrown when a request is invalid.
", + "error": { + "httpStatusCode": 403, + "senderFault": true + }, + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "ComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "PUT", + "requestUri": "/GreetingWithErrors", + "responseCode": 200 + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "errorCode": "ComplexError", + "error": { + "Header": "Header", + "TopLevel": "Top level", + "Nested": { + "Foo": "bar" + } + }, + "response": { + "status_code": 403, + "headers": { + "Content-Type": "application/xml", + "X-Header": "Header" + }, + "body": "ComplexError
\n This example serializes a blob shape in the payload.
In this example, no XML document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes a blob in the HTTP payload", + "result": { + "foo": "Foo", + "blob": "blobby blob blob" + }, + "response": { + "status_code": 200, + "headers": { + "X-Foo": "Foo" + }, + "body": "blobby blob blob" + } + }, + { + "id": "HttpPayloadTraitsWithNoBlobBody", + "given": { + "name": "HttpPayloadTraits", + "http": { + "method": "POST", + "requestUri": "/HttpPayloadTraits", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadTraitsInputOutput" + }, + "documentation": "This example serializes a blob shape in the payload.
In this example, no XML document is synthesized because the payload is not a structure or a union type.
" + }, + "description": "Serializes an empty blob in the HTTP payload", + "result": { + "foo": "Foo" + }, + "response": { + "status_code": 200, + "headers": { + "X-Foo": "Foo" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithMemberXmlName operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithMemberXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName", + "locationName": "Hola" + } + }, + "payload": "nested" + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "HttpPayloadWithMemberXmlName", + "given": { + "name": "HttpPayloadWithMemberXmlName", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithMemberXmlName", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadWithMemberXmlNameInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML name on the member, changing the wrapper name.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper name based on member xmlName", + "result": { + "nested": { + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This example serializes a structure in the payload.
Note that serializing a structure changes the wrapper element name to match the targeted structure.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload", + "result": { + "nested": { + "greeting": "hello", + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "Serializes a union in the payload.", + "result": { + "nested": { + "greeting": "hello" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This example serializes a union in the payload.
", + "idempotent": true + }, + "description": "No payload is sent if the union has no value.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Length": "0" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpPayloadWithXmlName operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpPayloadWithXmlNameInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "PayloadWithXmlName", + "locationName": "nested" + } + }, + "payload": "nested" + }, + "PayloadWithXmlName": { + "type": "structure", + "members": { + "name": { + "shape": "String" + } + }, + "locationName": "Hello" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "HttpPayloadWithXmlName", + "given": { + "name": "HttpPayloadWithXmlName", + "http": { + "method": "PUT", + "requestUri": "/HttpPayloadWithXmlName", + "responseCode": 200 + }, + "output": { + "shape": "HttpPayloadWithXmlNameInputOutput" + }, + "documentation": "The following example serializes a payload that uses an XML name, changing the wrapper name.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper name based on xmlName", + "result": { + "nested": { + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "The following example serializes a payload that uses an XML namespace.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper with an XML namespace", + "result": { + "nested": { + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "The following example serializes a payload that uses an XML namespace.
", + "idempotent": true + }, + "description": "Serializes a structure in the payload using a wrapper with an XML namespace", + "result": { + "nested": { + "name": "Phreddy" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "Adds headers by prefix", + "result": { + "foo": "Foo", + "fooMap": { + "abc": "Abc value", + "def": "Def value" + } + }, + "response": { + "status_code": 200, + "headers": { + "x-foo": "Foo", + "x-foo-abc": "Abc value", + "x-foo-def": "Def value" + }, + "body": "" + } + }, + { + "id": "HttpPrefixHeadersAreNotPresent", + "given": { + "name": "HttpPrefixHeaders", + "http": { + "method": "GET", + "requestUri": "/HttpPrefixHeaders", + "responseCode": 200 + }, + "output": { + "shape": "HttpPrefixHeadersInputOutput" + }, + "documentation": "This examples adds headers to the input of a request and response by prefix.
" + }, + "description": "No prefix headers are serialized because the value is empty", + "result": { + "foo": "Foo", + "fooMap": {} + }, + "response": { + "status_code": 200, + "headers": { + "x-foo": "Foo" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpResponseCode operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "HttpResponseCodeOutput": { + "type": "structure", + "members": { + "Status": { + "shape": "Integer", + "location": "statusCode" + } + } + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RestXmlHttpResponseCode", + "given": { + "name": "HttpResponseCode", + "http": { + "method": "PUT", + "requestUri": "/HttpResponseCode", + "responseCode": 200 + }, + "output": { + "shape": "HttpResponseCodeOutput" + }, + "idempotent": true + }, + "description": "Binds the http response code to an output structure.", + "result": { + "Status": 201 + }, + "response": { + "status_code": 201, + "headers": { + "Content-Type": "application/xml" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for HttpStringPayload operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "StringPayloadInput": { + "type": "structure", + "members": { + "payload": { + "shape": "String" + } + }, + "payload": "payload" + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RestXmlStringPayloadResponse", + "given": { + "name": "HttpStringPayload", + "http": { + "method": "POST", + "requestUri": "/StringPayload", + "responseCode": 200 + }, + "output": { + "shape": "StringPayloadInput" + } + }, + "result": { + "payload": "rawstring" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "text/plain" + }, + "body": "rawstring" + } + } + ] + }, + { + "description": "Test cases for IgnoreQueryParamsInResponse operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "IgnoreQueryParamsInResponseOutput": { + "type": "structure", + "members": { + "baz": { + "shape": "String", + "location": "uri", + "locationName": "baz" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "IgnoreQueryParamsInResponse", + "given": { + "name": "IgnoreQueryParamsInResponse", + "http": { + "method": "GET", + "requestUri": "/IgnoreQueryParamsInResponse", + "responseCode": 200 + }, + "output": { + "shape": "IgnoreQueryParamsInResponseOutput" + }, + "documentation": "This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.
" + }, + "description": "Query parameters must be ignored when serializing the output of an operation", + "result": { + "baz": "bam" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with string header bindings", + "result": { + "headerString": "Hello", + "headerStringList": [ + "a", + "b", + "c" + ], + "headerStringSet": [ + "a", + "b", + "c" + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-String": "Hello", + "X-StringList": "a, b, c", + "X-StringSet": "a, b, c" + }, + "body": "" + } + }, + { + "id": "InputAndOutputWithNumericHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with numeric header bindings", + "result": { + "headerByte": 1, + "headerShort": 123, + "headerInteger": 123, + "headerLong": 123, + "headerFloat": 1.1, + "headerDouble": 1.1, + "headerIntegerList": [ + 1, + 2, + 3 + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-Byte": "1", + "X-Double": "1.1", + "X-Float": "1.1", + "X-Integer": "123", + "X-IntegerList": "1, 2, 3", + "X-Long": "123", + "X-Short": "123" + }, + "body": "" + } + }, + { + "id": "InputAndOutputWithBooleanHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with boolean header bindings", + "result": { + "headerTrueBool": true, + "headerFalseBool": false, + "headerBooleanList": [ + true, + false, + true + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-Boolean1": "true", + "X-Boolean2": "false", + "X-BooleanList": "true, false, true" + }, + "body": "" + } + }, + { + "id": "InputAndOutputWithTimestampHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with timestamp header bindings", + "result": { + "headerTimestampList": [ + 1576540098, + 1576540098 + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT" + }, + "body": "" + } + }, + { + "id": "InputAndOutputWithEnumHeaders", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Tests responses with enum header bindings", + "result": { + "headerEnum": "Foo", + "headerEnumList": [ + "Foo", + "Bar", + "Baz" + ] + }, + "response": { + "status_code": 200, + "headers": { + "X-Enum": "Foo", + "X-EnumList": "Foo, Bar, Baz" + }, + "body": "" + } + }, + { + "id": "RestXmlSupportsNaNFloatHeaderOutputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling NaN float header values.", + "result": { + "headerFloat": "NaN", + "headerDouble": "NaN" + }, + "response": { + "status_code": 200, + "headers": { + "X-Double": "NaN", + "X-Float": "NaN" + }, + "body": "" + } + }, + { + "id": "RestXmlSupportsInfinityFloatHeaderOutputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling Infinity float header values.", + "result": { + "headerFloat": "Infinity", + "headerDouble": "Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "X-Double": "Infinity", + "X-Float": "Infinity" + }, + "body": "" + } + }, + { + "id": "RestXmlSupportsNegativeInfinityFloatHeaderOutputs", + "given": { + "name": "InputAndOutputWithHeaders", + "http": { + "method": "POST", + "requestUri": "/InputAndOutputWithHeaders", + "responseCode": 200 + }, + "output": { + "shape": "InputAndOutputWithHeadersIO" + }, + "documentation": "The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.
" + }, + "description": "Supports handling -Infinity float header values.", + "result": { + "headerFloat": "-Infinity", + "headerDouble": "-Infinity" + }, + "response": { + "status_code": 200, + "headers": { + "X-Double": "-Infinity", + "X-Float": "-Infinity" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for NestedXmlMaps operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "NestedXmlMapsResponse": { + "type": "structure", + "members": { + "nestedMap": { + "shape": "NestedMap" + }, + "flatNestedMap": { + "shape": "NestedMap", + "flattened": true + } + } + }, + "NestedMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnumMap" + } + }, + "FooEnumMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "FooEnum" + } + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "NestedXmlMapResponse", + "given": { + "name": "NestedXmlMaps", + "http": { + "method": "POST", + "requestUri": "/NestedXmlMaps", + "responseCode": 200 + }, + "output": { + "shape": "NestedXmlMapsResponse" + } + }, + "description": "Tests responses with nested maps.", + "result": { + "nestedMap": { + "foo": { + "bar": "Bar" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Nested Xml Maps with key/values with @xmlName
" + }, + "description": "Serializes nested XML maps in responses that have xmlName on members", + "result": { + "nestedXmlMapWithXmlNameMap": { + "foo": { + "bar": "Baz", + "fizz": "Buzz" + }, + "qux": { + "foobar": "Bar", + "fizzbuzz": "Buzz" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.
" + }, + "description": "No output serializes no payload", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for NoInputAndOutput operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "NoInputAndOutputOutput": { + "type": "structure", + "members": {} + } + }, + "cases": [ + { + "id": "NoInputAndOutput", + "given": { + "name": "NoInputAndOutput", + "http": { + "method": "POST", + "requestUri": "/NoInputAndOutputOutput", + "responseCode": 200 + }, + "output": { + "shape": "NoInputAndOutputOutput" + }, + "documentation": "The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.
" + }, + "description": "Empty output serializes no payload", + "result": {}, + "response": { + "status_code": 200, + "body": "" + } + } + ] + }, + { + "description": "Test cases for RecursiveShapes operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "RecursiveShapesResponse": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesInputOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveShapesInputOutputNested2" + } + } + }, + "String": { + "type": "string" + }, + "RecursiveShapesInputOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + } + }, + "cases": [ + { + "id": "RecursiveShapes", + "given": { + "name": "RecursiveShapes", + "http": { + "method": "PUT", + "requestUri": "/RecursiveShapes", + "responseCode": 200 + }, + "output": { + "shape": "RecursiveShapesResponse" + }, + "documentation": "Recursive shapes
", + "idempotent": true + }, + "description": "Serializes recursive structures", + "result": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "The example tests how timestamp request and response headers are serialized.
" + }, + "description": "Tests how timestamp response headers are serialized", + "result": { + "memberEpochSeconds": 1576540098, + "memberHttpDate": 1576540098, + "memberDateTime": 1576540098, + "defaultFormat": 1576540098, + "targetEpochSeconds": 1576540098, + "targetHttpDate": 1576540098, + "targetDateTime": 1576540098 + }, + "response": { + "status_code": 200, + "headers": { + "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-memberDateTime": "2019-12-16T23:48:18Z", + "X-memberEpochSeconds": "1576540098", + "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT", + "X-targetDateTime": "2019-12-16T23:48:18Z", + "X-targetEpochSeconds": "1576540098", + "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for XmlAttributes operation", + "metadata": { + "protocol": "rest-xml", + "protocols": [ + "rest-xml" + ], + "apiVersion": "2019-12-16" + }, + "shapes": { + "XmlAttributesResponse": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "attr": { + "shape": "String", + "locationName": "test", + "xmlAttribute": true + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "XmlAttributes", + "given": { + "name": "XmlAttributes", + "http": { + "method": "PUT", + "requestUri": "/XmlAttributes", + "responseCode": 200 + }, + "output": { + "shape": "XmlAttributesResponse" + }, + "documentation": "This example serializes an XML attributes on synthesized document.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "foo": "hi", + "attr": "test" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This example serializes an XML attributes on a document targeted by httpPayload.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "payload": { + "foo": "hi", + "attr": "test" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Blobs are base64 encoded
" + }, + "description": "Blobs are base64 encoded", + "result": { + "data": "value" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Blobs are base64 encoded
" + }, + "description": "Empty blobs are deserialized as empty string", + "result": { + "data": "" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Blobs are base64 encoded
" + }, + "description": "Empty self closed blobs are deserialized as empty string", + "result": { + "data": "" + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "XmlEmptyLists", + "given": { + "name": "XmlEmptyLists", + "http": { + "method": "PUT", + "requestUri": "/XmlEmptyLists", + "responseCode": 200 + }, + "output": { + "shape": "XmlEmptyListsResponse" + }, + "idempotent": true + }, + "description": "Deserializes Empty XML lists", + "result": { + "stringList": [], + "stringSet": [] + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "fooEnum1": "Foo", + "fooEnum2": "0", + "fooEnum3": "1", + "fooEnumList": [ + "Foo", + "0" + ], + "fooEnumSet": [ + "Foo", + "0" + ], + "fooEnumMap": { + "hi": "Foo", + "zero": "0" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This example serializes enums as top level properties, in lists, sets, and maps.
", + "idempotent": true + }, + "description": "Serializes simple scalar properties", + "result": { + "intEnum1": 1, + "intEnum2": 2, + "intEnum3": 3, + "intEnumList": [ + 1, + 2 + ], + "intEnumSet": [ + 1, + 2 + ], + "intEnumMap": { + "a": 1, + "b": 2 + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "A list of lists of strings.
" + }, + "RenamedListMembers": { + "type": "list", + "member": { + "shape": "String", + "locationName": "item" + } + }, + "ListWithMemberNamespace": { + "type": "list", + "member": { + "shape": "String", + "xmlNamespace": "https://xml-member.example.com" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "ListWithNamespace": { + "type": "list", + "member": { + "shape": "String" + }, + "xmlNamespace": "https://xml-list.example.com" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember", + "locationName": "item" + } + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String", + "locationName": "value" + }, + "b": { + "shape": "String", + "locationName": "other" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "XmlLists", + "given": { + "name": "XmlLists", + "http": { + "method": "PUT", + "requestUri": "/XmlLists", + "responseCode": 200 + }, + "output": { + "shape": "XmlListsResponse" + }, + "documentation": "This test case serializes XML lists for the following cases for both input and output:
The example tests basic map serialization.
" + }, + "description": "Tests for XML map serialization", + "result": { + "myMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "Maps with @xmlNamespace and @xmlName
" + }, + "description": "Serializes XML maps in responses that have xmlNamespace and xmlName on members", + "result": { + "myMap": { + "a": "A", + "b": "B" + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Tests how normal timestamps are serialized", + "result": { + "normal": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time works like normal timestamps", + "result": { + "dateTime": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps", + "result": { + "dateTimeOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds works", + "result": { + "epochSeconds": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works", + "result": { + "epochSecondsOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date works", + "result": { + "httpDate": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.
" + }, + "description": "Ensures that the timestampFormat of http-date on the target shape works", + "result": { + "httpDateOnTarget": 1398796238 + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/xml" + }, + "body": "This error is thrown when an invalid greeting value is provided.
", + "exception": true + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "RpcV2CborInvalidGreetingError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "InvalidGreeting" + } + ] + }, + "description": "Parses simple RpcV2 Cbor errors", + "errorCode": "InvalidGreeting", + "errorMessage": "Hi", + "error": { + "Message": "Hi" + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "v2ZfX3R5cGV4LnNtaXRoeS5wcm90b2NvbHRlc3RzLnJwY3YyQ2JvciNJbnZhbGlkR3JlZXRpbmdnTWVzc2FnZWJIaf8=" + } + } + ] + }, + { + "description": "Test cases for GreetingWithErrors operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": { + "ComplexError": { + "type": "structure", + "members": { + "TopLevel": { + "shape": "String" + }, + "Nested": { + "shape": "ComplexNestedErrorData" + } + }, + "documentation": "This error is thrown when a request is invalid.
", + "exception": true + }, + "String": { + "type": "string" + }, + "ComplexNestedErrorData": { + "type": "structure", + "members": { + "Foo": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "RpcV2CborComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "description": "Parses a complex error with no message member", + "errorCode": "ComplexError", + "error": { + "TopLevel": "Top level", + "Nested": { + "Foo": "bar" + } + }, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "v2ZfX3R5cGV4K3NtaXRoeS5wcm90b2NvbHRlc3RzLnJwY3YyQ2JvciNDb21wbGV4RXJyb3JoVG9wTGV2ZWxpVG9wIGxldmVsZk5lc3RlZL9jRm9vY2Jhcv//" + } + }, + { + "id": "RpcV2CborEmptyComplexError", + "given": { + "name": "GreetingWithErrors", + "http": { + "method": "POST", + "requestUri": "/" + }, + "documentation": "This operation has three possible return values:
Implementations must be able to successfully take a response and properly deserialize successful and error responses.
", + "idempotent": true, + "errors": [ + { + "shape": "ComplexError" + } + ] + }, + "errorCode": "ComplexError", + "error": {}, + "response": { + "status_code": 400, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "v2ZfX3R5cGV4K3NtaXRoeS5wcm90b2NvbHRlc3RzLnJwY3YyQ2JvciNDb21wbGV4RXJyb3L/" + } + } + ] + }, + { + "description": "Test cases for NoInputOutput operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": {}, + "cases": [ + { + "id": "no_output", + "given": { + "name": "NoInputOutput", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "A `Content-Type` header should not be set if the response body is empty.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "" + } + }, + { + "id": "NoOutputClientAllowsEmptyCbor", + "given": { + "name": "NoInputOutput", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Clients should accept a CBOR empty struct if there is no output.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "v/8=" + } + }, + { + "id": "NoOutputClientAllowsEmptyBody", + "given": { + "name": "NoInputOutput", + "http": { + "method": "POST", + "requestUri": "/" + } + }, + "description": "Clients should accept an empty body if there is no output and\nshould not raise an error if the `Content-Type` header is set.", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "" + } + } + ] + }, + { + "description": "Test cases for OptionalInputOutput operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": { + "SimpleStructure": { + "type": "structure", + "members": { + "value": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + } + }, + "cases": [ + { + "id": "optional_output", + "given": { + "name": "OptionalInputOutput", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "SimpleStructure" + } + }, + "description": "When output is empty we write CBOR equivalent of {}", + "result": {}, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "v/8=" + } + } + ] + }, + { + "description": "Test cases for RecursiveShapes operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": { + "RecursiveShapesInputOutput": { + "type": "structure", + "members": { + "nested": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + }, + "RecursiveShapesInputOutputNested1": { + "type": "structure", + "members": { + "foo": { + "shape": "String" + }, + "nested": { + "shape": "RecursiveShapesInputOutputNested2" + } + } + }, + "String": { + "type": "string" + }, + "RecursiveShapesInputOutputNested2": { + "type": "structure", + "members": { + "bar": { + "shape": "String" + }, + "recursiveMember": { + "shape": "RecursiveShapesInputOutputNested1" + } + } + } + }, + "cases": [ + { + "id": "RpcV2CborRecursiveShapes", + "given": { + "name": "RecursiveShapes", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RecursiveShapesInputOutput" + } + }, + "description": "Serializes recursive structures", + "result": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "v2ZuZXN0ZWS/Y2Zvb2RGb28xZm5lc3RlZL9jYmFyZEJhcjFvcmVjdXJzaXZlTWVtYmVyv2Nmb29kRm9vMmZuZXN0ZWS/Y2JhcmRCYXIy//////8=" + } + }, + { + "id": "RpcV2CborRecursiveShapesUsingDefiniteLength", + "given": { + "name": "RecursiveShapes", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RecursiveShapesInputOutput" + } + }, + "description": "Deserializes recursive structures encoded using a map with definite length", + "result": { + "nested": { + "foo": "Foo1", + "nested": { + "bar": "Bar1", + "recursiveMember": { + "foo": "Foo2", + "nested": { + "bar": "Bar2" + } + } + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "oWZuZXN0ZWSiY2Zvb2RGb28xZm5lc3RlZKJjYmFyZEJhcjFvcmVjdXJzaXZlTWVtYmVyomNmb29kRm9vMmZuZXN0ZWShY2JhcmRCYXIy" + } + } + ] + }, + { + "description": "Test cases for RpcV2CborDenseMaps operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": { + "RpcV2CborDenseMapsInputOutput": { + "type": "structure", + "members": { + "denseStructMap": { + "shape": "DenseStructMap" + }, + "denseNumberMap": { + "shape": "DenseNumberMap" + }, + "denseBooleanMap": { + "shape": "DenseBooleanMap" + }, + "denseStringMap": { + "shape": "DenseStringMap" + }, + "denseSetMap": { + "shape": "DenseSetMap" + } + } + }, + "DenseStructMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "GreetingStruct" + } + }, + "DenseNumberMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "Integer" + } + }, + "DenseBooleanMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "Boolean" + } + }, + "DenseStringMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "String" + } + }, + "DenseSetMap": { + "type": "map", + "key": { + "shape": "String" + }, + "value": { + "shape": "StringSet" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "String": { + "type": "string" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + }, + "GreetingStruct": { + "type": "structure", + "members": { + "hi": { + "shape": "String" + } + } + } + }, + "cases": [ + { + "id": "RpcV2CborMaps", + "given": { + "name": "RpcV2CborDenseMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RpcV2CborDenseMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Deserializes maps", + "result": { + "denseStructMap": { + "foo": { + "hi": "there" + }, + "baz": { + "hi": "bye" + } + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "oW5kZW5zZVN0cnVjdE1hcKJjZm9voWJoaWV0aGVyZWNiYXqhYmhpY2J5ZQ==" + } + }, + { + "id": "RpcV2CborDeserializesZeroValuesInMaps", + "given": { + "name": "RpcV2CborDenseMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RpcV2CborDenseMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Ensure that 0 and false are sent over the wire in all maps and lists", + "result": { + "denseNumberMap": { + "x": 0 + }, + "denseBooleanMap": { + "x": false + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "om5kZW5zZU51bWJlck1hcKFheABvZGVuc2VCb29sZWFuTWFwoWF49A==" + } + }, + { + "id": "RpcV2CborDeserializesDenseSetMap", + "given": { + "name": "RpcV2CborDenseMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RpcV2CborDenseMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "A response that contains a dense map of sets", + "result": { + "denseSetMap": { + "x": [], + "y": [ + "a", + "b" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "oWtkZW5zZVNldE1hcKJheIBheYJhYWFi" + } + }, + { + "id": "RpcV2CborDeserializesDenseSetMapAndSkipsNull", + "given": { + "name": "RpcV2CborDenseMaps", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RpcV2CborDenseMapsInputOutput" + }, + "documentation": "The example tests basic map serialization.
" + }, + "description": "Clients SHOULD tolerate seeing a null value in a dense map, and they SHOULD\ndrop the null key-value pair.", + "result": { + "denseSetMap": { + "x": [], + "y": [ + "a", + "b" + ] + } + }, + "response": { + "status_code": 200, + "headers": { + "Content-Type": "application/cbor", + "smithy-protocol": "rpc-v2-cbor" + }, + "body": "oWtkZW5zZVNldE1hcKNheIBheYJhYWFiYXr2" + } + } + ] + }, + { + "description": "Test cases for RpcV2CborLists operation", + "metadata": { + "protocol": "smithy-rpc-v2-cbor", + "protocols": [ + "smithy-rpc-v2-cbor" + ], + "apiVersion": "2020-07-14", + "targetPrefix": "RpcV2Protocol" + }, + "shapes": { + "RpcV2CborListInputOutput": { + "type": "structure", + "members": { + "stringList": { + "shape": "StringList" + }, + "stringSet": { + "shape": "StringSet" + }, + "integerList": { + "shape": "IntegerList" + }, + "booleanList": { + "shape": "BooleanList" + }, + "timestampList": { + "shape": "TimestampList" + }, + "enumList": { + "shape": "FooEnumList" + }, + "intEnumList": { + "shape": "IntegerEnumList" + }, + "nestedStringList": { + "shape": "NestedStringList" + }, + "structureList": { + "shape": "StructureList" + }, + "blobList": { + "shape": "BlobList" + } + } + }, + "StringList": { + "type": "list", + "member": { + "shape": "String" + } + }, + "StringSet": { + "type": "list", + "member": { + "shape": "String" + } + }, + "IntegerList": { + "type": "list", + "member": { + "shape": "Integer" + } + }, + "BooleanList": { + "type": "list", + "member": { + "shape": "Boolean" + } + }, + "TimestampList": { + "type": "list", + "member": { + "shape": "Timestamp" + } + }, + "FooEnumList": { + "type": "list", + "member": { + "shape": "FooEnum" + } + }, + "IntegerEnumList": { + "type": "list", + "member": { + "shape": "IntegerEnum" + } + }, + "NestedStringList": { + "type": "list", + "member": { + "shape": "StringList" + }, + "documentation": "A list of lists of strings.
" + }, + "StructureList": { + "type": "list", + "member": { + "shape": "StructureListMember" + } + }, + "BlobList": { + "type": "list", + "member": { + "shape": "Blob" + } + }, + "Blob": { + "type": "blob" + }, + "StructureListMember": { + "type": "structure", + "members": { + "a": { + "shape": "String" + }, + "b": { + "shape": "String" + } + } + }, + "String": { + "type": "string" + }, + "IntegerEnum": { + "type": "integer", + "box": true + }, + "FooEnum": { + "type": "string", + "enum": [ + "Foo", + "Baz", + "Bar", + "1", + "0" + ] + }, + "Timestamp": { + "type": "timestamp" + }, + "Boolean": { + "type": "boolean", + "box": true + }, + "Integer": { + "type": "integer", + "box": true + } + }, + "cases": [ + { + "id": "RpcV2CborLists", + "given": { + "name": "RpcV2CborLists", + "http": { + "method": "POST", + "requestUri": "/" + }, + "output": { + "shape": "RpcV2CborListInputOutput" + }, + "documentation": "This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output:
This test case serializes JSON lists for the following cases for both input and output: