// This file defines test cases that serialize maps in XML payloads. $version: "2.0" namespace aws.protocoltests.query use aws.protocols#awsQuery use aws.protocoltests.shared#FooEnumMap use aws.protocoltests.shared#GreetingStruct use smithy.test#httpResponseTests /// The example tests basic map serialization. operation XmlMaps { output: XmlMapsOutput } apply XmlMaps @httpResponseTests([ { id: "QueryXmlMaps", documentation: "Tests for XML map serialization", protocol: awsQuery, code: 200, body: """ foo there baz bye """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: { foo: { hi: "there" }, baz: { hi: "bye" } } } } ]) // Operation for client only @tags(["client-only"]) operation XmlEmptyMaps { output: XmlMapsOutput } apply XmlEmptyMaps @httpResponseTests([ { id: "QueryXmlEmptyMaps", documentation: "Deserializes Empty XML maps", protocol: awsQuery, code: 200, body: """ """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: {} }, appliesTo: "client", }, { id: "QueryXmlEmptySelfClosedMaps", documentation: "Deserializes Self-Closed XML maps", protocol: awsQuery, code: 200, body: """ """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: {} }, appliesTo: "client", } ]) structure XmlMapsOutput { myMap: XmlMapsOutputMap, } map XmlMapsOutputMap { key: String, value: GreetingStruct } // This example tests maps with @xmlName on members. operation XmlMapsXmlName { output: XmlMapsXmlNameOutput } apply XmlMapsXmlName @httpResponseTests([ { id: "QueryQueryXmlMapsXmlName", documentation: "Serializes XML lists", protocol: awsQuery, code: 200, body: """ foo there baz bye """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: { foo: { hi: "there" }, baz: { hi: "bye" } } } } ]) structure XmlMapsXmlNameOutput { myMap: XmlMapsXmlNameOutputMap, } map XmlMapsXmlNameOutputMap { @xmlName("Attribute") key: String, @xmlName("Setting") value: GreetingStruct } /// Flattened maps operation FlattenedXmlMap { output: FlattenedXmlMapOutput } apply FlattenedXmlMap @httpResponseTests([ { id: "QueryQueryFlattenedXmlMap", documentation: "Serializes flattened XML maps in responses", protocol: awsQuery, code: 200, body: """ foo Foo baz Baz """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: { foo: "Foo", baz: "Baz" } } } ]) structure FlattenedXmlMapOutput { @xmlFlattened myMap: FooEnumMap, } /// Flattened maps with @xmlName operation FlattenedXmlMapWithXmlName { output: FlattenedXmlMapWithXmlNameOutput } apply FlattenedXmlMapWithXmlName @httpResponseTests([ { id: "QueryQueryFlattenedXmlMapWithXmlName", documentation: "Serializes flattened XML maps in responses that have xmlName on members", protocol: awsQuery, code: 200, body: """ a A b B """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: { a: "A", b: "B", } } } ]) structure FlattenedXmlMapWithXmlNameOutput { @xmlFlattened @xmlName("KVP") myMap: FlattenedXmlMapWithXmlNameOutputMap, } map FlattenedXmlMapWithXmlNameOutputMap { @xmlName("K") key: String, @xmlName("V") value: String, } /// Flattened maps with @xmlNamespace and @xmlName operation FlattenedXmlMapWithXmlNamespace { output: FlattenedXmlMapWithXmlNamespaceOutput } apply FlattenedXmlMapWithXmlNamespace @httpResponseTests([ { id: "QueryQueryFlattenedXmlMapWithXmlNamespace", documentation: "Serializes flattened XML maps in responses that have xmlNamespace and xmlName on members", protocol: awsQuery, code: 200, body: """ a A b B """, bodyMediaType: "application/xml", headers: { "Content-Type": "text/xml" }, params: { myMap: { a: "A", b: "B", } } } ]) structure FlattenedXmlMapWithXmlNamespaceOutput { @xmlFlattened @xmlName("KVP") @xmlNamespace(uri: "https://the-member.example.com") myMap: FlattenedXmlMapWithXmlNamespaceOutputMap, } map FlattenedXmlMapWithXmlNamespaceOutputMap { @xmlName("K") @xmlNamespace(uri: "https://the-key.example.com") key: String, @xmlName("V") @xmlNamespace(uri: "https://the-value.example.com") value: String, }