cfn/aws/
apigatewayv2.rs

1//! Types for the `ApiGatewayV2` service.
2
3/// The [`AWS::ApiGatewayV2::Api`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html) resource type.
4#[derive(Debug, Default)]
5pub struct Api {
6    properties: ApiProperties
7}
8
9/// Properties for the `Api` resource.
10#[derive(Debug, Default)]
11pub struct ApiProperties {
12    /// Property [`ApiKeySelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-apikeyselectionexpression).
13    ///
14    /// Update type: _Mutable_.
15    /// AWS CloudFormation doesn't replace the resource when you change this property.
16    pub api_key_selection_expression: Option<::Value<String>>,
17    /// Property [`BasePath`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-basepath).
18    ///
19    /// Update type: _Mutable_.
20    /// AWS CloudFormation doesn't replace the resource when you change this property.
21    pub base_path: Option<::Value<String>>,
22    /// Property [`Body`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-body).
23    ///
24    /// Update type: _Mutable_.
25    /// AWS CloudFormation doesn't replace the resource when you change this property.
26    pub body: Option<::Value<::json::Value>>,
27    /// Property [`BodyS3Location`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-bodys3location).
28    ///
29    /// Update type: _Mutable_.
30    /// AWS CloudFormation doesn't replace the resource when you change this property.
31    pub body_s3_location: Option<::Value<self::api::BodyS3Location>>,
32    /// Property [`CorsConfiguration`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-corsconfiguration).
33    ///
34    /// Update type: _Mutable_.
35    /// AWS CloudFormation doesn't replace the resource when you change this property.
36    pub cors_configuration: Option<::Value<self::api::Cors>>,
37    /// Property [`CredentialsArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-credentialsarn).
38    ///
39    /// Update type: _Mutable_.
40    /// AWS CloudFormation doesn't replace the resource when you change this property.
41    pub credentials_arn: Option<::Value<String>>,
42    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-description).
43    ///
44    /// Update type: _Mutable_.
45    /// AWS CloudFormation doesn't replace the resource when you change this property.
46    pub description: Option<::Value<String>>,
47    /// Property [`DisableExecuteApiEndpoint`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-disableexecuteapiendpoint).
48    ///
49    /// Update type: _Mutable_.
50    /// AWS CloudFormation doesn't replace the resource when you change this property.
51    pub disable_execute_api_endpoint: Option<::Value<bool>>,
52    /// Property [`DisableSchemaValidation`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-disableschemavalidation).
53    ///
54    /// Update type: _Mutable_.
55    /// AWS CloudFormation doesn't replace the resource when you change this property.
56    pub disable_schema_validation: Option<::Value<bool>>,
57    /// Property [`FailOnWarnings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-failonwarnings).
58    ///
59    /// Update type: _Mutable_.
60    /// AWS CloudFormation doesn't replace the resource when you change this property.
61    pub fail_on_warnings: Option<::Value<bool>>,
62    /// Property [`Name`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-name).
63    ///
64    /// Update type: _Mutable_.
65    /// AWS CloudFormation doesn't replace the resource when you change this property.
66    pub name: Option<::Value<String>>,
67    /// Property [`ProtocolType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-protocoltype).
68    ///
69    /// Update type: _Immutable_.
70    /// AWS CloudFormation replaces the resource when you change this property.
71    pub protocol_type: Option<::Value<String>>,
72    /// Property [`RouteKey`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-routekey).
73    ///
74    /// Update type: _Mutable_.
75    /// AWS CloudFormation doesn't replace the resource when you change this property.
76    pub route_key: Option<::Value<String>>,
77    /// Property [`RouteSelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-routeselectionexpression).
78    ///
79    /// Update type: _Mutable_.
80    /// AWS CloudFormation doesn't replace the resource when you change this property.
81    pub route_selection_expression: Option<::Value<String>>,
82    /// Property [`Tags`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-tags).
83    ///
84    /// Update type: _Mutable_.
85    /// AWS CloudFormation doesn't replace the resource when you change this property.
86    pub tags: Option<::Value<::json::Value>>,
87    /// Property [`Target`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-target).
88    ///
89    /// Update type: _Mutable_.
90    /// AWS CloudFormation doesn't replace the resource when you change this property.
91    pub target: Option<::Value<String>>,
92    /// Property [`Version`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-version).
93    ///
94    /// Update type: _Mutable_.
95    /// AWS CloudFormation doesn't replace the resource when you change this property.
96    pub version: Option<::Value<String>>,
97}
98
99impl ::serde::Serialize for ApiProperties {
100    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
101        let mut map = ::serde::Serializer::serialize_map(s, None)?;
102        if let Some(ref api_key_selection_expression) = self.api_key_selection_expression {
103            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiKeySelectionExpression", api_key_selection_expression)?;
104        }
105        if let Some(ref base_path) = self.base_path {
106            ::serde::ser::SerializeMap::serialize_entry(&mut map, "BasePath", base_path)?;
107        }
108        if let Some(ref body) = self.body {
109            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Body", body)?;
110        }
111        if let Some(ref body_s3_location) = self.body_s3_location {
112            ::serde::ser::SerializeMap::serialize_entry(&mut map, "BodyS3Location", body_s3_location)?;
113        }
114        if let Some(ref cors_configuration) = self.cors_configuration {
115            ::serde::ser::SerializeMap::serialize_entry(&mut map, "CorsConfiguration", cors_configuration)?;
116        }
117        if let Some(ref credentials_arn) = self.credentials_arn {
118            ::serde::ser::SerializeMap::serialize_entry(&mut map, "CredentialsArn", credentials_arn)?;
119        }
120        if let Some(ref description) = self.description {
121            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
122        }
123        if let Some(ref disable_execute_api_endpoint) = self.disable_execute_api_endpoint {
124            ::serde::ser::SerializeMap::serialize_entry(&mut map, "DisableExecuteApiEndpoint", disable_execute_api_endpoint)?;
125        }
126        if let Some(ref disable_schema_validation) = self.disable_schema_validation {
127            ::serde::ser::SerializeMap::serialize_entry(&mut map, "DisableSchemaValidation", disable_schema_validation)?;
128        }
129        if let Some(ref fail_on_warnings) = self.fail_on_warnings {
130            ::serde::ser::SerializeMap::serialize_entry(&mut map, "FailOnWarnings", fail_on_warnings)?;
131        }
132        if let Some(ref name) = self.name {
133            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Name", name)?;
134        }
135        if let Some(ref protocol_type) = self.protocol_type {
136            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ProtocolType", protocol_type)?;
137        }
138        if let Some(ref route_key) = self.route_key {
139            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteKey", route_key)?;
140        }
141        if let Some(ref route_selection_expression) = self.route_selection_expression {
142            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteSelectionExpression", route_selection_expression)?;
143        }
144        if let Some(ref tags) = self.tags {
145            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Tags", tags)?;
146        }
147        if let Some(ref target) = self.target {
148            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Target", target)?;
149        }
150        if let Some(ref version) = self.version {
151            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Version", version)?;
152        }
153        ::serde::ser::SerializeMap::end(map)
154    }
155}
156
157impl<'de> ::serde::Deserialize<'de> for ApiProperties {
158    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ApiProperties, D::Error> {
159        struct Visitor;
160
161        impl<'de> ::serde::de::Visitor<'de> for Visitor {
162            type Value = ApiProperties;
163
164            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
165                write!(f, "a struct of type ApiProperties")
166            }
167
168            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
169                let mut api_key_selection_expression: Option<::Value<String>> = None;
170                let mut base_path: Option<::Value<String>> = None;
171                let mut body: Option<::Value<::json::Value>> = None;
172                let mut body_s3_location: Option<::Value<self::api::BodyS3Location>> = None;
173                let mut cors_configuration: Option<::Value<self::api::Cors>> = None;
174                let mut credentials_arn: Option<::Value<String>> = None;
175                let mut description: Option<::Value<String>> = None;
176                let mut disable_execute_api_endpoint: Option<::Value<bool>> = None;
177                let mut disable_schema_validation: Option<::Value<bool>> = None;
178                let mut fail_on_warnings: Option<::Value<bool>> = None;
179                let mut name: Option<::Value<String>> = None;
180                let mut protocol_type: Option<::Value<String>> = None;
181                let mut route_key: Option<::Value<String>> = None;
182                let mut route_selection_expression: Option<::Value<String>> = None;
183                let mut tags: Option<::Value<::json::Value>> = None;
184                let mut target: Option<::Value<String>> = None;
185                let mut version: Option<::Value<String>> = None;
186
187                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
188                    match __cfn_key.as_ref() {
189                        "ApiKeySelectionExpression" => {
190                            api_key_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
191                        }
192                        "BasePath" => {
193                            base_path = ::serde::de::MapAccess::next_value(&mut map)?;
194                        }
195                        "Body" => {
196                            body = ::serde::de::MapAccess::next_value(&mut map)?;
197                        }
198                        "BodyS3Location" => {
199                            body_s3_location = ::serde::de::MapAccess::next_value(&mut map)?;
200                        }
201                        "CorsConfiguration" => {
202                            cors_configuration = ::serde::de::MapAccess::next_value(&mut map)?;
203                        }
204                        "CredentialsArn" => {
205                            credentials_arn = ::serde::de::MapAccess::next_value(&mut map)?;
206                        }
207                        "Description" => {
208                            description = ::serde::de::MapAccess::next_value(&mut map)?;
209                        }
210                        "DisableExecuteApiEndpoint" => {
211                            disable_execute_api_endpoint = ::serde::de::MapAccess::next_value(&mut map)?;
212                        }
213                        "DisableSchemaValidation" => {
214                            disable_schema_validation = ::serde::de::MapAccess::next_value(&mut map)?;
215                        }
216                        "FailOnWarnings" => {
217                            fail_on_warnings = ::serde::de::MapAccess::next_value(&mut map)?;
218                        }
219                        "Name" => {
220                            name = ::serde::de::MapAccess::next_value(&mut map)?;
221                        }
222                        "ProtocolType" => {
223                            protocol_type = ::serde::de::MapAccess::next_value(&mut map)?;
224                        }
225                        "RouteKey" => {
226                            route_key = ::serde::de::MapAccess::next_value(&mut map)?;
227                        }
228                        "RouteSelectionExpression" => {
229                            route_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
230                        }
231                        "Tags" => {
232                            tags = ::serde::de::MapAccess::next_value(&mut map)?;
233                        }
234                        "Target" => {
235                            target = ::serde::de::MapAccess::next_value(&mut map)?;
236                        }
237                        "Version" => {
238                            version = ::serde::de::MapAccess::next_value(&mut map)?;
239                        }
240                        _ => {}
241                    }
242                }
243
244                Ok(ApiProperties {
245                    api_key_selection_expression: api_key_selection_expression,
246                    base_path: base_path,
247                    body: body,
248                    body_s3_location: body_s3_location,
249                    cors_configuration: cors_configuration,
250                    credentials_arn: credentials_arn,
251                    description: description,
252                    disable_execute_api_endpoint: disable_execute_api_endpoint,
253                    disable_schema_validation: disable_schema_validation,
254                    fail_on_warnings: fail_on_warnings,
255                    name: name,
256                    protocol_type: protocol_type,
257                    route_key: route_key,
258                    route_selection_expression: route_selection_expression,
259                    tags: tags,
260                    target: target,
261                    version: version,
262                })
263            }
264        }
265
266        d.deserialize_map(Visitor)
267    }
268}
269
270impl ::Resource for Api {
271    type Properties = ApiProperties;
272    const TYPE: &'static str = "AWS::ApiGatewayV2::Api";
273    fn properties(&self) -> &ApiProperties {
274        &self.properties
275    }
276    fn properties_mut(&mut self) -> &mut ApiProperties {
277        &mut self.properties
278    }
279}
280
281impl ::private::Sealed for Api {}
282
283impl From<ApiProperties> for Api {
284    fn from(properties: ApiProperties) -> Api {
285        Api { properties }
286    }
287}
288
289/// The [`AWS::ApiGatewayV2::ApiGatewayManagedOverrides`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apigatewaymanagedoverrides.html) resource type.
290#[derive(Debug, Default)]
291pub struct ApiGatewayManagedOverrides {
292    properties: ApiGatewayManagedOverridesProperties
293}
294
295/// Properties for the `ApiGatewayManagedOverrides` resource.
296#[derive(Debug, Default)]
297pub struct ApiGatewayManagedOverridesProperties {
298    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apigatewaymanagedoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-apiid).
299    ///
300    /// Update type: _Immutable_.
301    /// AWS CloudFormation replaces the resource when you change this property.
302    pub api_id: ::Value<String>,
303    /// Property [`Integration`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apigatewaymanagedoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-integration).
304    ///
305    /// Update type: _Mutable_.
306    /// AWS CloudFormation doesn't replace the resource when you change this property.
307    pub integration: Option<::Value<self::api_gateway_managed_overrides::IntegrationOverrides>>,
308    /// Property [`Route`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apigatewaymanagedoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-route).
309    ///
310    /// Update type: _Mutable_.
311    /// AWS CloudFormation doesn't replace the resource when you change this property.
312    pub route: Option<::Value<self::api_gateway_managed_overrides::RouteOverrides>>,
313    /// Property [`Stage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apigatewaymanagedoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stage).
314    ///
315    /// Update type: _Mutable_.
316    /// AWS CloudFormation doesn't replace the resource when you change this property.
317    pub stage: Option<::Value<self::api_gateway_managed_overrides::StageOverrides>>,
318}
319
320impl ::serde::Serialize for ApiGatewayManagedOverridesProperties {
321    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
322        let mut map = ::serde::Serializer::serialize_map(s, None)?;
323        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
324        if let Some(ref integration) = self.integration {
325            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Integration", integration)?;
326        }
327        if let Some(ref route) = self.route {
328            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Route", route)?;
329        }
330        if let Some(ref stage) = self.stage {
331            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Stage", stage)?;
332        }
333        ::serde::ser::SerializeMap::end(map)
334    }
335}
336
337impl<'de> ::serde::Deserialize<'de> for ApiGatewayManagedOverridesProperties {
338    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ApiGatewayManagedOverridesProperties, D::Error> {
339        struct Visitor;
340
341        impl<'de> ::serde::de::Visitor<'de> for Visitor {
342            type Value = ApiGatewayManagedOverridesProperties;
343
344            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
345                write!(f, "a struct of type ApiGatewayManagedOverridesProperties")
346            }
347
348            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
349                let mut api_id: Option<::Value<String>> = None;
350                let mut integration: Option<::Value<self::api_gateway_managed_overrides::IntegrationOverrides>> = None;
351                let mut route: Option<::Value<self::api_gateway_managed_overrides::RouteOverrides>> = None;
352                let mut stage: Option<::Value<self::api_gateway_managed_overrides::StageOverrides>> = None;
353
354                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
355                    match __cfn_key.as_ref() {
356                        "ApiId" => {
357                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
358                        }
359                        "Integration" => {
360                            integration = ::serde::de::MapAccess::next_value(&mut map)?;
361                        }
362                        "Route" => {
363                            route = ::serde::de::MapAccess::next_value(&mut map)?;
364                        }
365                        "Stage" => {
366                            stage = ::serde::de::MapAccess::next_value(&mut map)?;
367                        }
368                        _ => {}
369                    }
370                }
371
372                Ok(ApiGatewayManagedOverridesProperties {
373                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
374                    integration: integration,
375                    route: route,
376                    stage: stage,
377                })
378            }
379        }
380
381        d.deserialize_map(Visitor)
382    }
383}
384
385impl ::Resource for ApiGatewayManagedOverrides {
386    type Properties = ApiGatewayManagedOverridesProperties;
387    const TYPE: &'static str = "AWS::ApiGatewayV2::ApiGatewayManagedOverrides";
388    fn properties(&self) -> &ApiGatewayManagedOverridesProperties {
389        &self.properties
390    }
391    fn properties_mut(&mut self) -> &mut ApiGatewayManagedOverridesProperties {
392        &mut self.properties
393    }
394}
395
396impl ::private::Sealed for ApiGatewayManagedOverrides {}
397
398impl From<ApiGatewayManagedOverridesProperties> for ApiGatewayManagedOverrides {
399    fn from(properties: ApiGatewayManagedOverridesProperties) -> ApiGatewayManagedOverrides {
400        ApiGatewayManagedOverrides { properties }
401    }
402}
403
404/// The [`AWS::ApiGatewayV2::ApiMapping`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apimapping.html) resource type.
405#[derive(Debug, Default)]
406pub struct ApiMapping {
407    properties: ApiMappingProperties
408}
409
410/// Properties for the `ApiMapping` resource.
411#[derive(Debug, Default)]
412pub struct ApiMappingProperties {
413    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apimapping.html#cfn-apigatewayv2-apimapping-apiid).
414    ///
415    /// Update type: _Immutable_.
416    /// AWS CloudFormation replaces the resource when you change this property.
417    pub api_id: ::Value<String>,
418    /// Property [`ApiMappingKey`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apimapping.html#cfn-apigatewayv2-apimapping-apimappingkey).
419    ///
420    /// Update type: _Mutable_.
421    /// AWS CloudFormation doesn't replace the resource when you change this property.
422    pub api_mapping_key: Option<::Value<String>>,
423    /// Property [`DomainName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apimapping.html#cfn-apigatewayv2-apimapping-domainname).
424    ///
425    /// Update type: _Immutable_.
426    /// AWS CloudFormation replaces the resource when you change this property.
427    pub domain_name: ::Value<String>,
428    /// Property [`Stage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apimapping.html#cfn-apigatewayv2-apimapping-stage).
429    ///
430    /// Update type: _Mutable_.
431    /// AWS CloudFormation doesn't replace the resource when you change this property.
432    pub stage: ::Value<String>,
433}
434
435impl ::serde::Serialize for ApiMappingProperties {
436    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
437        let mut map = ::serde::Serializer::serialize_map(s, None)?;
438        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
439        if let Some(ref api_mapping_key) = self.api_mapping_key {
440            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiMappingKey", api_mapping_key)?;
441        }
442        ::serde::ser::SerializeMap::serialize_entry(&mut map, "DomainName", &self.domain_name)?;
443        ::serde::ser::SerializeMap::serialize_entry(&mut map, "Stage", &self.stage)?;
444        ::serde::ser::SerializeMap::end(map)
445    }
446}
447
448impl<'de> ::serde::Deserialize<'de> for ApiMappingProperties {
449    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ApiMappingProperties, D::Error> {
450        struct Visitor;
451
452        impl<'de> ::serde::de::Visitor<'de> for Visitor {
453            type Value = ApiMappingProperties;
454
455            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
456                write!(f, "a struct of type ApiMappingProperties")
457            }
458
459            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
460                let mut api_id: Option<::Value<String>> = None;
461                let mut api_mapping_key: Option<::Value<String>> = None;
462                let mut domain_name: Option<::Value<String>> = None;
463                let mut stage: Option<::Value<String>> = None;
464
465                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
466                    match __cfn_key.as_ref() {
467                        "ApiId" => {
468                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
469                        }
470                        "ApiMappingKey" => {
471                            api_mapping_key = ::serde::de::MapAccess::next_value(&mut map)?;
472                        }
473                        "DomainName" => {
474                            domain_name = ::serde::de::MapAccess::next_value(&mut map)?;
475                        }
476                        "Stage" => {
477                            stage = ::serde::de::MapAccess::next_value(&mut map)?;
478                        }
479                        _ => {}
480                    }
481                }
482
483                Ok(ApiMappingProperties {
484                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
485                    api_mapping_key: api_mapping_key,
486                    domain_name: domain_name.ok_or(::serde::de::Error::missing_field("DomainName"))?,
487                    stage: stage.ok_or(::serde::de::Error::missing_field("Stage"))?,
488                })
489            }
490        }
491
492        d.deserialize_map(Visitor)
493    }
494}
495
496impl ::Resource for ApiMapping {
497    type Properties = ApiMappingProperties;
498    const TYPE: &'static str = "AWS::ApiGatewayV2::ApiMapping";
499    fn properties(&self) -> &ApiMappingProperties {
500        &self.properties
501    }
502    fn properties_mut(&mut self) -> &mut ApiMappingProperties {
503        &mut self.properties
504    }
505}
506
507impl ::private::Sealed for ApiMapping {}
508
509impl From<ApiMappingProperties> for ApiMapping {
510    fn from(properties: ApiMappingProperties) -> ApiMapping {
511        ApiMapping { properties }
512    }
513}
514
515/// The [`AWS::ApiGatewayV2::Authorizer`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html) resource type.
516#[derive(Debug, Default)]
517pub struct Authorizer {
518    properties: AuthorizerProperties
519}
520
521/// Properties for the `Authorizer` resource.
522#[derive(Debug, Default)]
523pub struct AuthorizerProperties {
524    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-apiid).
525    ///
526    /// Update type: _Immutable_.
527    /// AWS CloudFormation replaces the resource when you change this property.
528    pub api_id: ::Value<String>,
529    /// Property [`AuthorizerCredentialsArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-authorizercredentialsarn).
530    ///
531    /// Update type: _Mutable_.
532    /// AWS CloudFormation doesn't replace the resource when you change this property.
533    pub authorizer_credentials_arn: Option<::Value<String>>,
534    /// Property [`AuthorizerPayloadFormatVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-authorizerpayloadformatversion).
535    ///
536    /// Update type: _Mutable_.
537    /// AWS CloudFormation doesn't replace the resource when you change this property.
538    pub authorizer_payload_format_version: Option<::Value<String>>,
539    /// Property [`AuthorizerResultTtlInSeconds`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-authorizerresultttlinseconds).
540    ///
541    /// Update type: _Mutable_.
542    /// AWS CloudFormation doesn't replace the resource when you change this property.
543    pub authorizer_result_ttl_in_seconds: Option<::Value<u32>>,
544    /// Property [`AuthorizerType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-authorizertype).
545    ///
546    /// Update type: _Mutable_.
547    /// AWS CloudFormation doesn't replace the resource when you change this property.
548    pub authorizer_type: ::Value<String>,
549    /// Property [`AuthorizerUri`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-authorizeruri).
550    ///
551    /// Update type: _Mutable_.
552    /// AWS CloudFormation doesn't replace the resource when you change this property.
553    pub authorizer_uri: Option<::Value<String>>,
554    /// Property [`EnableSimpleResponses`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-enablesimpleresponses).
555    ///
556    /// Update type: _Mutable_.
557    /// AWS CloudFormation doesn't replace the resource when you change this property.
558    pub enable_simple_responses: Option<::Value<bool>>,
559    /// Property [`IdentitySource`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-identitysource).
560    ///
561    /// Update type: _Mutable_.
562    /// AWS CloudFormation doesn't replace the resource when you change this property.
563    pub identity_source: Option<::ValueList<String>>,
564    /// Property [`IdentityValidationExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-identityvalidationexpression).
565    ///
566    /// Update type: _Mutable_.
567    /// AWS CloudFormation doesn't replace the resource when you change this property.
568    pub identity_validation_expression: Option<::Value<String>>,
569    /// Property [`JwtConfiguration`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-jwtconfiguration).
570    ///
571    /// Update type: _Mutable_.
572    /// AWS CloudFormation doesn't replace the resource when you change this property.
573    pub jwt_configuration: Option<::Value<self::authorizer::JWTConfiguration>>,
574    /// Property [`Name`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html#cfn-apigatewayv2-authorizer-name).
575    ///
576    /// Update type: _Mutable_.
577    /// AWS CloudFormation doesn't replace the resource when you change this property.
578    pub name: ::Value<String>,
579}
580
581impl ::serde::Serialize for AuthorizerProperties {
582    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
583        let mut map = ::serde::Serializer::serialize_map(s, None)?;
584        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
585        if let Some(ref authorizer_credentials_arn) = self.authorizer_credentials_arn {
586            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerCredentialsArn", authorizer_credentials_arn)?;
587        }
588        if let Some(ref authorizer_payload_format_version) = self.authorizer_payload_format_version {
589            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerPayloadFormatVersion", authorizer_payload_format_version)?;
590        }
591        if let Some(ref authorizer_result_ttl_in_seconds) = self.authorizer_result_ttl_in_seconds {
592            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerResultTtlInSeconds", authorizer_result_ttl_in_seconds)?;
593        }
594        ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerType", &self.authorizer_type)?;
595        if let Some(ref authorizer_uri) = self.authorizer_uri {
596            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerUri", authorizer_uri)?;
597        }
598        if let Some(ref enable_simple_responses) = self.enable_simple_responses {
599            ::serde::ser::SerializeMap::serialize_entry(&mut map, "EnableSimpleResponses", enable_simple_responses)?;
600        }
601        if let Some(ref identity_source) = self.identity_source {
602            ::serde::ser::SerializeMap::serialize_entry(&mut map, "IdentitySource", identity_source)?;
603        }
604        if let Some(ref identity_validation_expression) = self.identity_validation_expression {
605            ::serde::ser::SerializeMap::serialize_entry(&mut map, "IdentityValidationExpression", identity_validation_expression)?;
606        }
607        if let Some(ref jwt_configuration) = self.jwt_configuration {
608            ::serde::ser::SerializeMap::serialize_entry(&mut map, "JwtConfiguration", jwt_configuration)?;
609        }
610        ::serde::ser::SerializeMap::serialize_entry(&mut map, "Name", &self.name)?;
611        ::serde::ser::SerializeMap::end(map)
612    }
613}
614
615impl<'de> ::serde::Deserialize<'de> for AuthorizerProperties {
616    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<AuthorizerProperties, D::Error> {
617        struct Visitor;
618
619        impl<'de> ::serde::de::Visitor<'de> for Visitor {
620            type Value = AuthorizerProperties;
621
622            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
623                write!(f, "a struct of type AuthorizerProperties")
624            }
625
626            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
627                let mut api_id: Option<::Value<String>> = None;
628                let mut authorizer_credentials_arn: Option<::Value<String>> = None;
629                let mut authorizer_payload_format_version: Option<::Value<String>> = None;
630                let mut authorizer_result_ttl_in_seconds: Option<::Value<u32>> = None;
631                let mut authorizer_type: Option<::Value<String>> = None;
632                let mut authorizer_uri: Option<::Value<String>> = None;
633                let mut enable_simple_responses: Option<::Value<bool>> = None;
634                let mut identity_source: Option<::ValueList<String>> = None;
635                let mut identity_validation_expression: Option<::Value<String>> = None;
636                let mut jwt_configuration: Option<::Value<self::authorizer::JWTConfiguration>> = None;
637                let mut name: Option<::Value<String>> = None;
638
639                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
640                    match __cfn_key.as_ref() {
641                        "ApiId" => {
642                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
643                        }
644                        "AuthorizerCredentialsArn" => {
645                            authorizer_credentials_arn = ::serde::de::MapAccess::next_value(&mut map)?;
646                        }
647                        "AuthorizerPayloadFormatVersion" => {
648                            authorizer_payload_format_version = ::serde::de::MapAccess::next_value(&mut map)?;
649                        }
650                        "AuthorizerResultTtlInSeconds" => {
651                            authorizer_result_ttl_in_seconds = ::serde::de::MapAccess::next_value(&mut map)?;
652                        }
653                        "AuthorizerType" => {
654                            authorizer_type = ::serde::de::MapAccess::next_value(&mut map)?;
655                        }
656                        "AuthorizerUri" => {
657                            authorizer_uri = ::serde::de::MapAccess::next_value(&mut map)?;
658                        }
659                        "EnableSimpleResponses" => {
660                            enable_simple_responses = ::serde::de::MapAccess::next_value(&mut map)?;
661                        }
662                        "IdentitySource" => {
663                            identity_source = ::serde::de::MapAccess::next_value(&mut map)?;
664                        }
665                        "IdentityValidationExpression" => {
666                            identity_validation_expression = ::serde::de::MapAccess::next_value(&mut map)?;
667                        }
668                        "JwtConfiguration" => {
669                            jwt_configuration = ::serde::de::MapAccess::next_value(&mut map)?;
670                        }
671                        "Name" => {
672                            name = ::serde::de::MapAccess::next_value(&mut map)?;
673                        }
674                        _ => {}
675                    }
676                }
677
678                Ok(AuthorizerProperties {
679                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
680                    authorizer_credentials_arn: authorizer_credentials_arn,
681                    authorizer_payload_format_version: authorizer_payload_format_version,
682                    authorizer_result_ttl_in_seconds: authorizer_result_ttl_in_seconds,
683                    authorizer_type: authorizer_type.ok_or(::serde::de::Error::missing_field("AuthorizerType"))?,
684                    authorizer_uri: authorizer_uri,
685                    enable_simple_responses: enable_simple_responses,
686                    identity_source: identity_source,
687                    identity_validation_expression: identity_validation_expression,
688                    jwt_configuration: jwt_configuration,
689                    name: name.ok_or(::serde::de::Error::missing_field("Name"))?,
690                })
691            }
692        }
693
694        d.deserialize_map(Visitor)
695    }
696}
697
698impl ::Resource for Authorizer {
699    type Properties = AuthorizerProperties;
700    const TYPE: &'static str = "AWS::ApiGatewayV2::Authorizer";
701    fn properties(&self) -> &AuthorizerProperties {
702        &self.properties
703    }
704    fn properties_mut(&mut self) -> &mut AuthorizerProperties {
705        &mut self.properties
706    }
707}
708
709impl ::private::Sealed for Authorizer {}
710
711impl From<AuthorizerProperties> for Authorizer {
712    fn from(properties: AuthorizerProperties) -> Authorizer {
713        Authorizer { properties }
714    }
715}
716
717/// The [`AWS::ApiGatewayV2::Deployment`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-deployment.html) resource type.
718#[derive(Debug, Default)]
719pub struct Deployment {
720    properties: DeploymentProperties
721}
722
723/// Properties for the `Deployment` resource.
724#[derive(Debug, Default)]
725pub struct DeploymentProperties {
726    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-deployment.html#cfn-apigatewayv2-deployment-apiid).
727    ///
728    /// Update type: _Immutable_.
729    /// AWS CloudFormation replaces the resource when you change this property.
730    pub api_id: ::Value<String>,
731    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-deployment.html#cfn-apigatewayv2-deployment-description).
732    ///
733    /// Update type: _Mutable_.
734    /// AWS CloudFormation doesn't replace the resource when you change this property.
735    pub description: Option<::Value<String>>,
736    /// Property [`StageName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-deployment.html#cfn-apigatewayv2-deployment-stagename).
737    ///
738    /// Update type: _Mutable_.
739    /// AWS CloudFormation doesn't replace the resource when you change this property.
740    pub stage_name: Option<::Value<String>>,
741}
742
743impl ::serde::Serialize for DeploymentProperties {
744    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
745        let mut map = ::serde::Serializer::serialize_map(s, None)?;
746        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
747        if let Some(ref description) = self.description {
748            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
749        }
750        if let Some(ref stage_name) = self.stage_name {
751            ::serde::ser::SerializeMap::serialize_entry(&mut map, "StageName", stage_name)?;
752        }
753        ::serde::ser::SerializeMap::end(map)
754    }
755}
756
757impl<'de> ::serde::Deserialize<'de> for DeploymentProperties {
758    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<DeploymentProperties, D::Error> {
759        struct Visitor;
760
761        impl<'de> ::serde::de::Visitor<'de> for Visitor {
762            type Value = DeploymentProperties;
763
764            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
765                write!(f, "a struct of type DeploymentProperties")
766            }
767
768            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
769                let mut api_id: Option<::Value<String>> = None;
770                let mut description: Option<::Value<String>> = None;
771                let mut stage_name: Option<::Value<String>> = None;
772
773                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
774                    match __cfn_key.as_ref() {
775                        "ApiId" => {
776                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
777                        }
778                        "Description" => {
779                            description = ::serde::de::MapAccess::next_value(&mut map)?;
780                        }
781                        "StageName" => {
782                            stage_name = ::serde::de::MapAccess::next_value(&mut map)?;
783                        }
784                        _ => {}
785                    }
786                }
787
788                Ok(DeploymentProperties {
789                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
790                    description: description,
791                    stage_name: stage_name,
792                })
793            }
794        }
795
796        d.deserialize_map(Visitor)
797    }
798}
799
800impl ::Resource for Deployment {
801    type Properties = DeploymentProperties;
802    const TYPE: &'static str = "AWS::ApiGatewayV2::Deployment";
803    fn properties(&self) -> &DeploymentProperties {
804        &self.properties
805    }
806    fn properties_mut(&mut self) -> &mut DeploymentProperties {
807        &mut self.properties
808    }
809}
810
811impl ::private::Sealed for Deployment {}
812
813impl From<DeploymentProperties> for Deployment {
814    fn from(properties: DeploymentProperties) -> Deployment {
815        Deployment { properties }
816    }
817}
818
819/// The [`AWS::ApiGatewayV2::DomainName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html) resource type.
820#[derive(Debug, Default)]
821pub struct DomainName {
822    properties: DomainNameProperties
823}
824
825/// Properties for the `DomainName` resource.
826#[derive(Debug, Default)]
827pub struct DomainNameProperties {
828    /// Property [`DomainName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html#cfn-apigatewayv2-domainname-domainname).
829    ///
830    /// Update type: _Immutable_.
831    /// AWS CloudFormation replaces the resource when you change this property.
832    pub domain_name: ::Value<String>,
833    /// Property [`DomainNameConfigurations`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html#cfn-apigatewayv2-domainname-domainnameconfigurations).
834    ///
835    /// Update type: _Mutable_.
836    /// AWS CloudFormation doesn't replace the resource when you change this property.
837    pub domain_name_configurations: Option<::ValueList<self::domain_name::DomainNameConfiguration>>,
838    /// Property [`MutualTlsAuthentication`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html#cfn-apigatewayv2-domainname-mutualtlsauthentication).
839    ///
840    /// Update type: _Mutable_.
841    /// AWS CloudFormation doesn't replace the resource when you change this property.
842    pub mutual_tls_authentication: Option<::Value<self::domain_name::MutualTlsAuthentication>>,
843    /// Property [`Tags`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html#cfn-apigatewayv2-domainname-tags).
844    ///
845    /// Update type: _Mutable_.
846    /// AWS CloudFormation doesn't replace the resource when you change this property.
847    pub tags: Option<::Value<::json::Value>>,
848}
849
850impl ::serde::Serialize for DomainNameProperties {
851    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
852        let mut map = ::serde::Serializer::serialize_map(s, None)?;
853        ::serde::ser::SerializeMap::serialize_entry(&mut map, "DomainName", &self.domain_name)?;
854        if let Some(ref domain_name_configurations) = self.domain_name_configurations {
855            ::serde::ser::SerializeMap::serialize_entry(&mut map, "DomainNameConfigurations", domain_name_configurations)?;
856        }
857        if let Some(ref mutual_tls_authentication) = self.mutual_tls_authentication {
858            ::serde::ser::SerializeMap::serialize_entry(&mut map, "MutualTlsAuthentication", mutual_tls_authentication)?;
859        }
860        if let Some(ref tags) = self.tags {
861            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Tags", tags)?;
862        }
863        ::serde::ser::SerializeMap::end(map)
864    }
865}
866
867impl<'de> ::serde::Deserialize<'de> for DomainNameProperties {
868    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<DomainNameProperties, D::Error> {
869        struct Visitor;
870
871        impl<'de> ::serde::de::Visitor<'de> for Visitor {
872            type Value = DomainNameProperties;
873
874            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
875                write!(f, "a struct of type DomainNameProperties")
876            }
877
878            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
879                let mut domain_name: Option<::Value<String>> = None;
880                let mut domain_name_configurations: Option<::ValueList<self::domain_name::DomainNameConfiguration>> = None;
881                let mut mutual_tls_authentication: Option<::Value<self::domain_name::MutualTlsAuthentication>> = None;
882                let mut tags: Option<::Value<::json::Value>> = None;
883
884                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
885                    match __cfn_key.as_ref() {
886                        "DomainName" => {
887                            domain_name = ::serde::de::MapAccess::next_value(&mut map)?;
888                        }
889                        "DomainNameConfigurations" => {
890                            domain_name_configurations = ::serde::de::MapAccess::next_value(&mut map)?;
891                        }
892                        "MutualTlsAuthentication" => {
893                            mutual_tls_authentication = ::serde::de::MapAccess::next_value(&mut map)?;
894                        }
895                        "Tags" => {
896                            tags = ::serde::de::MapAccess::next_value(&mut map)?;
897                        }
898                        _ => {}
899                    }
900                }
901
902                Ok(DomainNameProperties {
903                    domain_name: domain_name.ok_or(::serde::de::Error::missing_field("DomainName"))?,
904                    domain_name_configurations: domain_name_configurations,
905                    mutual_tls_authentication: mutual_tls_authentication,
906                    tags: tags,
907                })
908            }
909        }
910
911        d.deserialize_map(Visitor)
912    }
913}
914
915impl ::Resource for DomainName {
916    type Properties = DomainNameProperties;
917    const TYPE: &'static str = "AWS::ApiGatewayV2::DomainName";
918    fn properties(&self) -> &DomainNameProperties {
919        &self.properties
920    }
921    fn properties_mut(&mut self) -> &mut DomainNameProperties {
922        &mut self.properties
923    }
924}
925
926impl ::private::Sealed for DomainName {}
927
928impl From<DomainNameProperties> for DomainName {
929    fn from(properties: DomainNameProperties) -> DomainName {
930        DomainName { properties }
931    }
932}
933
934/// The [`AWS::ApiGatewayV2::Integration`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html) resource type.
935#[derive(Debug, Default)]
936pub struct Integration {
937    properties: IntegrationProperties
938}
939
940/// Properties for the `Integration` resource.
941#[derive(Debug, Default)]
942pub struct IntegrationProperties {
943    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-apiid).
944    ///
945    /// Update type: _Immutable_.
946    /// AWS CloudFormation replaces the resource when you change this property.
947    pub api_id: ::Value<String>,
948    /// Property [`ConnectionId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-connectionid).
949    ///
950    /// Update type: _Mutable_.
951    /// AWS CloudFormation doesn't replace the resource when you change this property.
952    pub connection_id: Option<::Value<String>>,
953    /// Property [`ConnectionType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-connectiontype).
954    ///
955    /// Update type: _Mutable_.
956    /// AWS CloudFormation doesn't replace the resource when you change this property.
957    pub connection_type: Option<::Value<String>>,
958    /// Property [`ContentHandlingStrategy`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-contenthandlingstrategy).
959    ///
960    /// Update type: _Mutable_.
961    /// AWS CloudFormation doesn't replace the resource when you change this property.
962    pub content_handling_strategy: Option<::Value<String>>,
963    /// Property [`CredentialsArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-credentialsarn).
964    ///
965    /// Update type: _Mutable_.
966    /// AWS CloudFormation doesn't replace the resource when you change this property.
967    pub credentials_arn: Option<::Value<String>>,
968    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-description).
969    ///
970    /// Update type: _Mutable_.
971    /// AWS CloudFormation doesn't replace the resource when you change this property.
972    pub description: Option<::Value<String>>,
973    /// Property [`IntegrationMethod`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-integrationmethod).
974    ///
975    /// Update type: _Mutable_.
976    /// AWS CloudFormation doesn't replace the resource when you change this property.
977    pub integration_method: Option<::Value<String>>,
978    /// Property [`IntegrationSubtype`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-integrationsubtype).
979    ///
980    /// Update type: _Mutable_.
981    /// AWS CloudFormation doesn't replace the resource when you change this property.
982    pub integration_subtype: Option<::Value<String>>,
983    /// Property [`IntegrationType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-integrationtype).
984    ///
985    /// Update type: _Mutable_.
986    /// AWS CloudFormation doesn't replace the resource when you change this property.
987    pub integration_type: ::Value<String>,
988    /// Property [`IntegrationUri`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-integrationuri).
989    ///
990    /// Update type: _Mutable_.
991    /// AWS CloudFormation doesn't replace the resource when you change this property.
992    pub integration_uri: Option<::Value<String>>,
993    /// Property [`PassthroughBehavior`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-passthroughbehavior).
994    ///
995    /// Update type: _Mutable_.
996    /// AWS CloudFormation doesn't replace the resource when you change this property.
997    pub passthrough_behavior: Option<::Value<String>>,
998    /// Property [`PayloadFormatVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-payloadformatversion).
999    ///
1000    /// Update type: _Mutable_.
1001    /// AWS CloudFormation doesn't replace the resource when you change this property.
1002    pub payload_format_version: Option<::Value<String>>,
1003    /// Property [`RequestParameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-requestparameters).
1004    ///
1005    /// Update type: _Mutable_.
1006    /// AWS CloudFormation doesn't replace the resource when you change this property.
1007    pub request_parameters: Option<::Value<::json::Value>>,
1008    /// Property [`RequestTemplates`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-requesttemplates).
1009    ///
1010    /// Update type: _Mutable_.
1011    /// AWS CloudFormation doesn't replace the resource when you change this property.
1012    pub request_templates: Option<::Value<::json::Value>>,
1013    /// Property [`ResponseParameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-responseparameters).
1014    ///
1015    /// Update type: _Mutable_.
1016    /// AWS CloudFormation doesn't replace the resource when you change this property.
1017    pub response_parameters: Option<::Value<::json::Value>>,
1018    /// Property [`TemplateSelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-templateselectionexpression).
1019    ///
1020    /// Update type: _Mutable_.
1021    /// AWS CloudFormation doesn't replace the resource when you change this property.
1022    pub template_selection_expression: Option<::Value<String>>,
1023    /// Property [`TimeoutInMillis`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-timeoutinmillis).
1024    ///
1025    /// Update type: _Mutable_.
1026    /// AWS CloudFormation doesn't replace the resource when you change this property.
1027    pub timeout_in_millis: Option<::Value<u32>>,
1028    /// Property [`TlsConfig`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-tlsconfig).
1029    ///
1030    /// Update type: _Mutable_.
1031    /// AWS CloudFormation doesn't replace the resource when you change this property.
1032    pub tls_config: Option<::Value<self::integration::TlsConfig>>,
1033}
1034
1035impl ::serde::Serialize for IntegrationProperties {
1036    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1037        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1038        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
1039        if let Some(ref connection_id) = self.connection_id {
1040            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ConnectionId", connection_id)?;
1041        }
1042        if let Some(ref connection_type) = self.connection_type {
1043            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ConnectionType", connection_type)?;
1044        }
1045        if let Some(ref content_handling_strategy) = self.content_handling_strategy {
1046            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ContentHandlingStrategy", content_handling_strategy)?;
1047        }
1048        if let Some(ref credentials_arn) = self.credentials_arn {
1049            ::serde::ser::SerializeMap::serialize_entry(&mut map, "CredentialsArn", credentials_arn)?;
1050        }
1051        if let Some(ref description) = self.description {
1052            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
1053        }
1054        if let Some(ref integration_method) = self.integration_method {
1055            ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationMethod", integration_method)?;
1056        }
1057        if let Some(ref integration_subtype) = self.integration_subtype {
1058            ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationSubtype", integration_subtype)?;
1059        }
1060        ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationType", &self.integration_type)?;
1061        if let Some(ref integration_uri) = self.integration_uri {
1062            ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationUri", integration_uri)?;
1063        }
1064        if let Some(ref passthrough_behavior) = self.passthrough_behavior {
1065            ::serde::ser::SerializeMap::serialize_entry(&mut map, "PassthroughBehavior", passthrough_behavior)?;
1066        }
1067        if let Some(ref payload_format_version) = self.payload_format_version {
1068            ::serde::ser::SerializeMap::serialize_entry(&mut map, "PayloadFormatVersion", payload_format_version)?;
1069        }
1070        if let Some(ref request_parameters) = self.request_parameters {
1071            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RequestParameters", request_parameters)?;
1072        }
1073        if let Some(ref request_templates) = self.request_templates {
1074            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RequestTemplates", request_templates)?;
1075        }
1076        if let Some(ref response_parameters) = self.response_parameters {
1077            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ResponseParameters", response_parameters)?;
1078        }
1079        if let Some(ref template_selection_expression) = self.template_selection_expression {
1080            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TemplateSelectionExpression", template_selection_expression)?;
1081        }
1082        if let Some(ref timeout_in_millis) = self.timeout_in_millis {
1083            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TimeoutInMillis", timeout_in_millis)?;
1084        }
1085        if let Some(ref tls_config) = self.tls_config {
1086            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TlsConfig", tls_config)?;
1087        }
1088        ::serde::ser::SerializeMap::end(map)
1089    }
1090}
1091
1092impl<'de> ::serde::Deserialize<'de> for IntegrationProperties {
1093    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<IntegrationProperties, D::Error> {
1094        struct Visitor;
1095
1096        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1097            type Value = IntegrationProperties;
1098
1099            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1100                write!(f, "a struct of type IntegrationProperties")
1101            }
1102
1103            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1104                let mut api_id: Option<::Value<String>> = None;
1105                let mut connection_id: Option<::Value<String>> = None;
1106                let mut connection_type: Option<::Value<String>> = None;
1107                let mut content_handling_strategy: Option<::Value<String>> = None;
1108                let mut credentials_arn: Option<::Value<String>> = None;
1109                let mut description: Option<::Value<String>> = None;
1110                let mut integration_method: Option<::Value<String>> = None;
1111                let mut integration_subtype: Option<::Value<String>> = None;
1112                let mut integration_type: Option<::Value<String>> = None;
1113                let mut integration_uri: Option<::Value<String>> = None;
1114                let mut passthrough_behavior: Option<::Value<String>> = None;
1115                let mut payload_format_version: Option<::Value<String>> = None;
1116                let mut request_parameters: Option<::Value<::json::Value>> = None;
1117                let mut request_templates: Option<::Value<::json::Value>> = None;
1118                let mut response_parameters: Option<::Value<::json::Value>> = None;
1119                let mut template_selection_expression: Option<::Value<String>> = None;
1120                let mut timeout_in_millis: Option<::Value<u32>> = None;
1121                let mut tls_config: Option<::Value<self::integration::TlsConfig>> = None;
1122
1123                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1124                    match __cfn_key.as_ref() {
1125                        "ApiId" => {
1126                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
1127                        }
1128                        "ConnectionId" => {
1129                            connection_id = ::serde::de::MapAccess::next_value(&mut map)?;
1130                        }
1131                        "ConnectionType" => {
1132                            connection_type = ::serde::de::MapAccess::next_value(&mut map)?;
1133                        }
1134                        "ContentHandlingStrategy" => {
1135                            content_handling_strategy = ::serde::de::MapAccess::next_value(&mut map)?;
1136                        }
1137                        "CredentialsArn" => {
1138                            credentials_arn = ::serde::de::MapAccess::next_value(&mut map)?;
1139                        }
1140                        "Description" => {
1141                            description = ::serde::de::MapAccess::next_value(&mut map)?;
1142                        }
1143                        "IntegrationMethod" => {
1144                            integration_method = ::serde::de::MapAccess::next_value(&mut map)?;
1145                        }
1146                        "IntegrationSubtype" => {
1147                            integration_subtype = ::serde::de::MapAccess::next_value(&mut map)?;
1148                        }
1149                        "IntegrationType" => {
1150                            integration_type = ::serde::de::MapAccess::next_value(&mut map)?;
1151                        }
1152                        "IntegrationUri" => {
1153                            integration_uri = ::serde::de::MapAccess::next_value(&mut map)?;
1154                        }
1155                        "PassthroughBehavior" => {
1156                            passthrough_behavior = ::serde::de::MapAccess::next_value(&mut map)?;
1157                        }
1158                        "PayloadFormatVersion" => {
1159                            payload_format_version = ::serde::de::MapAccess::next_value(&mut map)?;
1160                        }
1161                        "RequestParameters" => {
1162                            request_parameters = ::serde::de::MapAccess::next_value(&mut map)?;
1163                        }
1164                        "RequestTemplates" => {
1165                            request_templates = ::serde::de::MapAccess::next_value(&mut map)?;
1166                        }
1167                        "ResponseParameters" => {
1168                            response_parameters = ::serde::de::MapAccess::next_value(&mut map)?;
1169                        }
1170                        "TemplateSelectionExpression" => {
1171                            template_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
1172                        }
1173                        "TimeoutInMillis" => {
1174                            timeout_in_millis = ::serde::de::MapAccess::next_value(&mut map)?;
1175                        }
1176                        "TlsConfig" => {
1177                            tls_config = ::serde::de::MapAccess::next_value(&mut map)?;
1178                        }
1179                        _ => {}
1180                    }
1181                }
1182
1183                Ok(IntegrationProperties {
1184                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
1185                    connection_id: connection_id,
1186                    connection_type: connection_type,
1187                    content_handling_strategy: content_handling_strategy,
1188                    credentials_arn: credentials_arn,
1189                    description: description,
1190                    integration_method: integration_method,
1191                    integration_subtype: integration_subtype,
1192                    integration_type: integration_type.ok_or(::serde::de::Error::missing_field("IntegrationType"))?,
1193                    integration_uri: integration_uri,
1194                    passthrough_behavior: passthrough_behavior,
1195                    payload_format_version: payload_format_version,
1196                    request_parameters: request_parameters,
1197                    request_templates: request_templates,
1198                    response_parameters: response_parameters,
1199                    template_selection_expression: template_selection_expression,
1200                    timeout_in_millis: timeout_in_millis,
1201                    tls_config: tls_config,
1202                })
1203            }
1204        }
1205
1206        d.deserialize_map(Visitor)
1207    }
1208}
1209
1210impl ::Resource for Integration {
1211    type Properties = IntegrationProperties;
1212    const TYPE: &'static str = "AWS::ApiGatewayV2::Integration";
1213    fn properties(&self) -> &IntegrationProperties {
1214        &self.properties
1215    }
1216    fn properties_mut(&mut self) -> &mut IntegrationProperties {
1217        &mut self.properties
1218    }
1219}
1220
1221impl ::private::Sealed for Integration {}
1222
1223impl From<IntegrationProperties> for Integration {
1224    fn from(properties: IntegrationProperties) -> Integration {
1225        Integration { properties }
1226    }
1227}
1228
1229/// The [`AWS::ApiGatewayV2::IntegrationResponse`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html) resource type.
1230#[derive(Debug, Default)]
1231pub struct IntegrationResponse {
1232    properties: IntegrationResponseProperties
1233}
1234
1235/// Properties for the `IntegrationResponse` resource.
1236#[derive(Debug, Default)]
1237pub struct IntegrationResponseProperties {
1238    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-apiid).
1239    ///
1240    /// Update type: _Mutable_.
1241    /// AWS CloudFormation doesn't replace the resource when you change this property.
1242    pub api_id: ::Value<String>,
1243    /// Property [`ContentHandlingStrategy`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-contenthandlingstrategy).
1244    ///
1245    /// Update type: _Mutable_.
1246    /// AWS CloudFormation doesn't replace the resource when you change this property.
1247    pub content_handling_strategy: Option<::Value<String>>,
1248    /// Property [`IntegrationId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-integrationid).
1249    ///
1250    /// Update type: _Mutable_.
1251    /// AWS CloudFormation doesn't replace the resource when you change this property.
1252    pub integration_id: ::Value<String>,
1253    /// Property [`IntegrationResponseKey`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-integrationresponsekey).
1254    ///
1255    /// Update type: _Mutable_.
1256    /// AWS CloudFormation doesn't replace the resource when you change this property.
1257    pub integration_response_key: ::Value<String>,
1258    /// Property [`ResponseParameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-responseparameters).
1259    ///
1260    /// Update type: _Mutable_.
1261    /// AWS CloudFormation doesn't replace the resource when you change this property.
1262    pub response_parameters: Option<::Value<::json::Value>>,
1263    /// Property [`ResponseTemplates`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-responsetemplates).
1264    ///
1265    /// Update type: _Mutable_.
1266    /// AWS CloudFormation doesn't replace the resource when you change this property.
1267    pub response_templates: Option<::Value<::json::Value>>,
1268    /// Property [`TemplateSelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html#cfn-apigatewayv2-integrationresponse-templateselectionexpression).
1269    ///
1270    /// Update type: _Mutable_.
1271    /// AWS CloudFormation doesn't replace the resource when you change this property.
1272    pub template_selection_expression: Option<::Value<String>>,
1273}
1274
1275impl ::serde::Serialize for IntegrationResponseProperties {
1276    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1277        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1278        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
1279        if let Some(ref content_handling_strategy) = self.content_handling_strategy {
1280            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ContentHandlingStrategy", content_handling_strategy)?;
1281        }
1282        ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationId", &self.integration_id)?;
1283        ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationResponseKey", &self.integration_response_key)?;
1284        if let Some(ref response_parameters) = self.response_parameters {
1285            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ResponseParameters", response_parameters)?;
1286        }
1287        if let Some(ref response_templates) = self.response_templates {
1288            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ResponseTemplates", response_templates)?;
1289        }
1290        if let Some(ref template_selection_expression) = self.template_selection_expression {
1291            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TemplateSelectionExpression", template_selection_expression)?;
1292        }
1293        ::serde::ser::SerializeMap::end(map)
1294    }
1295}
1296
1297impl<'de> ::serde::Deserialize<'de> for IntegrationResponseProperties {
1298    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<IntegrationResponseProperties, D::Error> {
1299        struct Visitor;
1300
1301        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1302            type Value = IntegrationResponseProperties;
1303
1304            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1305                write!(f, "a struct of type IntegrationResponseProperties")
1306            }
1307
1308            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1309                let mut api_id: Option<::Value<String>> = None;
1310                let mut content_handling_strategy: Option<::Value<String>> = None;
1311                let mut integration_id: Option<::Value<String>> = None;
1312                let mut integration_response_key: Option<::Value<String>> = None;
1313                let mut response_parameters: Option<::Value<::json::Value>> = None;
1314                let mut response_templates: Option<::Value<::json::Value>> = None;
1315                let mut template_selection_expression: Option<::Value<String>> = None;
1316
1317                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1318                    match __cfn_key.as_ref() {
1319                        "ApiId" => {
1320                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
1321                        }
1322                        "ContentHandlingStrategy" => {
1323                            content_handling_strategy = ::serde::de::MapAccess::next_value(&mut map)?;
1324                        }
1325                        "IntegrationId" => {
1326                            integration_id = ::serde::de::MapAccess::next_value(&mut map)?;
1327                        }
1328                        "IntegrationResponseKey" => {
1329                            integration_response_key = ::serde::de::MapAccess::next_value(&mut map)?;
1330                        }
1331                        "ResponseParameters" => {
1332                            response_parameters = ::serde::de::MapAccess::next_value(&mut map)?;
1333                        }
1334                        "ResponseTemplates" => {
1335                            response_templates = ::serde::de::MapAccess::next_value(&mut map)?;
1336                        }
1337                        "TemplateSelectionExpression" => {
1338                            template_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
1339                        }
1340                        _ => {}
1341                    }
1342                }
1343
1344                Ok(IntegrationResponseProperties {
1345                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
1346                    content_handling_strategy: content_handling_strategy,
1347                    integration_id: integration_id.ok_or(::serde::de::Error::missing_field("IntegrationId"))?,
1348                    integration_response_key: integration_response_key.ok_or(::serde::de::Error::missing_field("IntegrationResponseKey"))?,
1349                    response_parameters: response_parameters,
1350                    response_templates: response_templates,
1351                    template_selection_expression: template_selection_expression,
1352                })
1353            }
1354        }
1355
1356        d.deserialize_map(Visitor)
1357    }
1358}
1359
1360impl ::Resource for IntegrationResponse {
1361    type Properties = IntegrationResponseProperties;
1362    const TYPE: &'static str = "AWS::ApiGatewayV2::IntegrationResponse";
1363    fn properties(&self) -> &IntegrationResponseProperties {
1364        &self.properties
1365    }
1366    fn properties_mut(&mut self) -> &mut IntegrationResponseProperties {
1367        &mut self.properties
1368    }
1369}
1370
1371impl ::private::Sealed for IntegrationResponse {}
1372
1373impl From<IntegrationResponseProperties> for IntegrationResponse {
1374    fn from(properties: IntegrationResponseProperties) -> IntegrationResponse {
1375        IntegrationResponse { properties }
1376    }
1377}
1378
1379/// The [`AWS::ApiGatewayV2::Model`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html) resource type.
1380#[derive(Debug, Default)]
1381pub struct Model {
1382    properties: ModelProperties
1383}
1384
1385/// Properties for the `Model` resource.
1386#[derive(Debug, Default)]
1387pub struct ModelProperties {
1388    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html#cfn-apigatewayv2-model-apiid).
1389    ///
1390    /// Update type: _Immutable_.
1391    /// AWS CloudFormation replaces the resource when you change this property.
1392    pub api_id: ::Value<String>,
1393    /// Property [`ContentType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html#cfn-apigatewayv2-model-contenttype).
1394    ///
1395    /// Update type: _Mutable_.
1396    /// AWS CloudFormation doesn't replace the resource when you change this property.
1397    pub content_type: Option<::Value<String>>,
1398    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html#cfn-apigatewayv2-model-description).
1399    ///
1400    /// Update type: _Mutable_.
1401    /// AWS CloudFormation doesn't replace the resource when you change this property.
1402    pub description: Option<::Value<String>>,
1403    /// Property [`Name`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html#cfn-apigatewayv2-model-name).
1404    ///
1405    /// Update type: _Mutable_.
1406    /// AWS CloudFormation doesn't replace the resource when you change this property.
1407    pub name: ::Value<String>,
1408    /// Property [`Schema`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html#cfn-apigatewayv2-model-schema).
1409    ///
1410    /// Update type: _Mutable_.
1411    /// AWS CloudFormation doesn't replace the resource when you change this property.
1412    pub schema: ::Value<::json::Value>,
1413}
1414
1415impl ::serde::Serialize for ModelProperties {
1416    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1417        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1418        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
1419        if let Some(ref content_type) = self.content_type {
1420            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ContentType", content_type)?;
1421        }
1422        if let Some(ref description) = self.description {
1423            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
1424        }
1425        ::serde::ser::SerializeMap::serialize_entry(&mut map, "Name", &self.name)?;
1426        ::serde::ser::SerializeMap::serialize_entry(&mut map, "Schema", &self.schema)?;
1427        ::serde::ser::SerializeMap::end(map)
1428    }
1429}
1430
1431impl<'de> ::serde::Deserialize<'de> for ModelProperties {
1432    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ModelProperties, D::Error> {
1433        struct Visitor;
1434
1435        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1436            type Value = ModelProperties;
1437
1438            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1439                write!(f, "a struct of type ModelProperties")
1440            }
1441
1442            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1443                let mut api_id: Option<::Value<String>> = None;
1444                let mut content_type: Option<::Value<String>> = None;
1445                let mut description: Option<::Value<String>> = None;
1446                let mut name: Option<::Value<String>> = None;
1447                let mut schema: Option<::Value<::json::Value>> = None;
1448
1449                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1450                    match __cfn_key.as_ref() {
1451                        "ApiId" => {
1452                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
1453                        }
1454                        "ContentType" => {
1455                            content_type = ::serde::de::MapAccess::next_value(&mut map)?;
1456                        }
1457                        "Description" => {
1458                            description = ::serde::de::MapAccess::next_value(&mut map)?;
1459                        }
1460                        "Name" => {
1461                            name = ::serde::de::MapAccess::next_value(&mut map)?;
1462                        }
1463                        "Schema" => {
1464                            schema = ::serde::de::MapAccess::next_value(&mut map)?;
1465                        }
1466                        _ => {}
1467                    }
1468                }
1469
1470                Ok(ModelProperties {
1471                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
1472                    content_type: content_type,
1473                    description: description,
1474                    name: name.ok_or(::serde::de::Error::missing_field("Name"))?,
1475                    schema: schema.ok_or(::serde::de::Error::missing_field("Schema"))?,
1476                })
1477            }
1478        }
1479
1480        d.deserialize_map(Visitor)
1481    }
1482}
1483
1484impl ::Resource for Model {
1485    type Properties = ModelProperties;
1486    const TYPE: &'static str = "AWS::ApiGatewayV2::Model";
1487    fn properties(&self) -> &ModelProperties {
1488        &self.properties
1489    }
1490    fn properties_mut(&mut self) -> &mut ModelProperties {
1491        &mut self.properties
1492    }
1493}
1494
1495impl ::private::Sealed for Model {}
1496
1497impl From<ModelProperties> for Model {
1498    fn from(properties: ModelProperties) -> Model {
1499        Model { properties }
1500    }
1501}
1502
1503/// The [`AWS::ApiGatewayV2::Route`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html) resource type.
1504#[derive(Debug, Default)]
1505pub struct Route {
1506    properties: RouteProperties
1507}
1508
1509/// Properties for the `Route` resource.
1510#[derive(Debug, Default)]
1511pub struct RouteProperties {
1512    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-apiid).
1513    ///
1514    /// Update type: _Immutable_.
1515    /// AWS CloudFormation replaces the resource when you change this property.
1516    pub api_id: ::Value<String>,
1517    /// Property [`ApiKeyRequired`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-apikeyrequired).
1518    ///
1519    /// Update type: _Mutable_.
1520    /// AWS CloudFormation doesn't replace the resource when you change this property.
1521    pub api_key_required: Option<::Value<bool>>,
1522    /// Property [`AuthorizationScopes`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-authorizationscopes).
1523    ///
1524    /// Update type: _Mutable_.
1525    /// AWS CloudFormation doesn't replace the resource when you change this property.
1526    pub authorization_scopes: Option<::ValueList<String>>,
1527    /// Property [`AuthorizationType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-authorizationtype).
1528    ///
1529    /// Update type: _Mutable_.
1530    /// AWS CloudFormation doesn't replace the resource when you change this property.
1531    pub authorization_type: Option<::Value<String>>,
1532    /// Property [`AuthorizerId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-authorizerid).
1533    ///
1534    /// Update type: _Mutable_.
1535    /// AWS CloudFormation doesn't replace the resource when you change this property.
1536    pub authorizer_id: Option<::Value<String>>,
1537    /// Property [`ModelSelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-modelselectionexpression).
1538    ///
1539    /// Update type: _Mutable_.
1540    /// AWS CloudFormation doesn't replace the resource when you change this property.
1541    pub model_selection_expression: Option<::Value<String>>,
1542    /// Property [`OperationName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-operationname).
1543    ///
1544    /// Update type: _Mutable_.
1545    /// AWS CloudFormation doesn't replace the resource when you change this property.
1546    pub operation_name: Option<::Value<String>>,
1547    /// Property [`RequestModels`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-requestmodels).
1548    ///
1549    /// Update type: _Mutable_.
1550    /// AWS CloudFormation doesn't replace the resource when you change this property.
1551    pub request_models: Option<::Value<::json::Value>>,
1552    /// Property [`RequestParameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-requestparameters).
1553    ///
1554    /// Update type: _Mutable_.
1555    /// AWS CloudFormation doesn't replace the resource when you change this property.
1556    pub request_parameters: Option<::Value<::json::Value>>,
1557    /// Property [`RouteKey`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-routekey).
1558    ///
1559    /// Update type: _Mutable_.
1560    /// AWS CloudFormation doesn't replace the resource when you change this property.
1561    pub route_key: ::Value<String>,
1562    /// Property [`RouteResponseSelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-routeresponseselectionexpression).
1563    ///
1564    /// Update type: _Mutable_.
1565    /// AWS CloudFormation doesn't replace the resource when you change this property.
1566    pub route_response_selection_expression: Option<::Value<String>>,
1567    /// Property [`Target`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-target).
1568    ///
1569    /// Update type: _Mutable_.
1570    /// AWS CloudFormation doesn't replace the resource when you change this property.
1571    pub target: Option<::Value<String>>,
1572}
1573
1574impl ::serde::Serialize for RouteProperties {
1575    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1576        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1577        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
1578        if let Some(ref api_key_required) = self.api_key_required {
1579            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiKeyRequired", api_key_required)?;
1580        }
1581        if let Some(ref authorization_scopes) = self.authorization_scopes {
1582            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizationScopes", authorization_scopes)?;
1583        }
1584        if let Some(ref authorization_type) = self.authorization_type {
1585            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizationType", authorization_type)?;
1586        }
1587        if let Some(ref authorizer_id) = self.authorizer_id {
1588            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerId", authorizer_id)?;
1589        }
1590        if let Some(ref model_selection_expression) = self.model_selection_expression {
1591            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ModelSelectionExpression", model_selection_expression)?;
1592        }
1593        if let Some(ref operation_name) = self.operation_name {
1594            ::serde::ser::SerializeMap::serialize_entry(&mut map, "OperationName", operation_name)?;
1595        }
1596        if let Some(ref request_models) = self.request_models {
1597            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RequestModels", request_models)?;
1598        }
1599        if let Some(ref request_parameters) = self.request_parameters {
1600            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RequestParameters", request_parameters)?;
1601        }
1602        ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteKey", &self.route_key)?;
1603        if let Some(ref route_response_selection_expression) = self.route_response_selection_expression {
1604            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteResponseSelectionExpression", route_response_selection_expression)?;
1605        }
1606        if let Some(ref target) = self.target {
1607            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Target", target)?;
1608        }
1609        ::serde::ser::SerializeMap::end(map)
1610    }
1611}
1612
1613impl<'de> ::serde::Deserialize<'de> for RouteProperties {
1614    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<RouteProperties, D::Error> {
1615        struct Visitor;
1616
1617        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1618            type Value = RouteProperties;
1619
1620            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1621                write!(f, "a struct of type RouteProperties")
1622            }
1623
1624            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1625                let mut api_id: Option<::Value<String>> = None;
1626                let mut api_key_required: Option<::Value<bool>> = None;
1627                let mut authorization_scopes: Option<::ValueList<String>> = None;
1628                let mut authorization_type: Option<::Value<String>> = None;
1629                let mut authorizer_id: Option<::Value<String>> = None;
1630                let mut model_selection_expression: Option<::Value<String>> = None;
1631                let mut operation_name: Option<::Value<String>> = None;
1632                let mut request_models: Option<::Value<::json::Value>> = None;
1633                let mut request_parameters: Option<::Value<::json::Value>> = None;
1634                let mut route_key: Option<::Value<String>> = None;
1635                let mut route_response_selection_expression: Option<::Value<String>> = None;
1636                let mut target: Option<::Value<String>> = None;
1637
1638                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1639                    match __cfn_key.as_ref() {
1640                        "ApiId" => {
1641                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
1642                        }
1643                        "ApiKeyRequired" => {
1644                            api_key_required = ::serde::de::MapAccess::next_value(&mut map)?;
1645                        }
1646                        "AuthorizationScopes" => {
1647                            authorization_scopes = ::serde::de::MapAccess::next_value(&mut map)?;
1648                        }
1649                        "AuthorizationType" => {
1650                            authorization_type = ::serde::de::MapAccess::next_value(&mut map)?;
1651                        }
1652                        "AuthorizerId" => {
1653                            authorizer_id = ::serde::de::MapAccess::next_value(&mut map)?;
1654                        }
1655                        "ModelSelectionExpression" => {
1656                            model_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
1657                        }
1658                        "OperationName" => {
1659                            operation_name = ::serde::de::MapAccess::next_value(&mut map)?;
1660                        }
1661                        "RequestModels" => {
1662                            request_models = ::serde::de::MapAccess::next_value(&mut map)?;
1663                        }
1664                        "RequestParameters" => {
1665                            request_parameters = ::serde::de::MapAccess::next_value(&mut map)?;
1666                        }
1667                        "RouteKey" => {
1668                            route_key = ::serde::de::MapAccess::next_value(&mut map)?;
1669                        }
1670                        "RouteResponseSelectionExpression" => {
1671                            route_response_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
1672                        }
1673                        "Target" => {
1674                            target = ::serde::de::MapAccess::next_value(&mut map)?;
1675                        }
1676                        _ => {}
1677                    }
1678                }
1679
1680                Ok(RouteProperties {
1681                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
1682                    api_key_required: api_key_required,
1683                    authorization_scopes: authorization_scopes,
1684                    authorization_type: authorization_type,
1685                    authorizer_id: authorizer_id,
1686                    model_selection_expression: model_selection_expression,
1687                    operation_name: operation_name,
1688                    request_models: request_models,
1689                    request_parameters: request_parameters,
1690                    route_key: route_key.ok_or(::serde::de::Error::missing_field("RouteKey"))?,
1691                    route_response_selection_expression: route_response_selection_expression,
1692                    target: target,
1693                })
1694            }
1695        }
1696
1697        d.deserialize_map(Visitor)
1698    }
1699}
1700
1701impl ::Resource for Route {
1702    type Properties = RouteProperties;
1703    const TYPE: &'static str = "AWS::ApiGatewayV2::Route";
1704    fn properties(&self) -> &RouteProperties {
1705        &self.properties
1706    }
1707    fn properties_mut(&mut self) -> &mut RouteProperties {
1708        &mut self.properties
1709    }
1710}
1711
1712impl ::private::Sealed for Route {}
1713
1714impl From<RouteProperties> for Route {
1715    fn from(properties: RouteProperties) -> Route {
1716        Route { properties }
1717    }
1718}
1719
1720/// The [`AWS::ApiGatewayV2::RouteResponse`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html) resource type.
1721#[derive(Debug, Default)]
1722pub struct RouteResponse {
1723    properties: RouteResponseProperties
1724}
1725
1726/// Properties for the `RouteResponse` resource.
1727#[derive(Debug, Default)]
1728pub struct RouteResponseProperties {
1729    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html#cfn-apigatewayv2-routeresponse-apiid).
1730    ///
1731    /// Update type: _Immutable_.
1732    /// AWS CloudFormation replaces the resource when you change this property.
1733    pub api_id: ::Value<String>,
1734    /// Property [`ModelSelectionExpression`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html#cfn-apigatewayv2-routeresponse-modelselectionexpression).
1735    ///
1736    /// Update type: _Mutable_.
1737    /// AWS CloudFormation doesn't replace the resource when you change this property.
1738    pub model_selection_expression: Option<::Value<String>>,
1739    /// Property [`ResponseModels`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html#cfn-apigatewayv2-routeresponse-responsemodels).
1740    ///
1741    /// Update type: _Mutable_.
1742    /// AWS CloudFormation doesn't replace the resource when you change this property.
1743    pub response_models: Option<::Value<::json::Value>>,
1744    /// Property [`ResponseParameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html#cfn-apigatewayv2-routeresponse-responseparameters).
1745    ///
1746    /// Update type: _Mutable_.
1747    /// AWS CloudFormation doesn't replace the resource when you change this property.
1748    pub response_parameters: Option<::Value<::json::Value>>,
1749    /// Property [`RouteId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html#cfn-apigatewayv2-routeresponse-routeid).
1750    ///
1751    /// Update type: _Immutable_.
1752    /// AWS CloudFormation replaces the resource when you change this property.
1753    pub route_id: ::Value<String>,
1754    /// Property [`RouteResponseKey`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html#cfn-apigatewayv2-routeresponse-routeresponsekey).
1755    ///
1756    /// Update type: _Mutable_.
1757    /// AWS CloudFormation doesn't replace the resource when you change this property.
1758    pub route_response_key: ::Value<String>,
1759}
1760
1761impl ::serde::Serialize for RouteResponseProperties {
1762    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1763        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1764        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
1765        if let Some(ref model_selection_expression) = self.model_selection_expression {
1766            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ModelSelectionExpression", model_selection_expression)?;
1767        }
1768        if let Some(ref response_models) = self.response_models {
1769            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ResponseModels", response_models)?;
1770        }
1771        if let Some(ref response_parameters) = self.response_parameters {
1772            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ResponseParameters", response_parameters)?;
1773        }
1774        ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteId", &self.route_id)?;
1775        ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteResponseKey", &self.route_response_key)?;
1776        ::serde::ser::SerializeMap::end(map)
1777    }
1778}
1779
1780impl<'de> ::serde::Deserialize<'de> for RouteResponseProperties {
1781    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<RouteResponseProperties, D::Error> {
1782        struct Visitor;
1783
1784        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1785            type Value = RouteResponseProperties;
1786
1787            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1788                write!(f, "a struct of type RouteResponseProperties")
1789            }
1790
1791            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1792                let mut api_id: Option<::Value<String>> = None;
1793                let mut model_selection_expression: Option<::Value<String>> = None;
1794                let mut response_models: Option<::Value<::json::Value>> = None;
1795                let mut response_parameters: Option<::Value<::json::Value>> = None;
1796                let mut route_id: Option<::Value<String>> = None;
1797                let mut route_response_key: Option<::Value<String>> = None;
1798
1799                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1800                    match __cfn_key.as_ref() {
1801                        "ApiId" => {
1802                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
1803                        }
1804                        "ModelSelectionExpression" => {
1805                            model_selection_expression = ::serde::de::MapAccess::next_value(&mut map)?;
1806                        }
1807                        "ResponseModels" => {
1808                            response_models = ::serde::de::MapAccess::next_value(&mut map)?;
1809                        }
1810                        "ResponseParameters" => {
1811                            response_parameters = ::serde::de::MapAccess::next_value(&mut map)?;
1812                        }
1813                        "RouteId" => {
1814                            route_id = ::serde::de::MapAccess::next_value(&mut map)?;
1815                        }
1816                        "RouteResponseKey" => {
1817                            route_response_key = ::serde::de::MapAccess::next_value(&mut map)?;
1818                        }
1819                        _ => {}
1820                    }
1821                }
1822
1823                Ok(RouteResponseProperties {
1824                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
1825                    model_selection_expression: model_selection_expression,
1826                    response_models: response_models,
1827                    response_parameters: response_parameters,
1828                    route_id: route_id.ok_or(::serde::de::Error::missing_field("RouteId"))?,
1829                    route_response_key: route_response_key.ok_or(::serde::de::Error::missing_field("RouteResponseKey"))?,
1830                })
1831            }
1832        }
1833
1834        d.deserialize_map(Visitor)
1835    }
1836}
1837
1838impl ::Resource for RouteResponse {
1839    type Properties = RouteResponseProperties;
1840    const TYPE: &'static str = "AWS::ApiGatewayV2::RouteResponse";
1841    fn properties(&self) -> &RouteResponseProperties {
1842        &self.properties
1843    }
1844    fn properties_mut(&mut self) -> &mut RouteResponseProperties {
1845        &mut self.properties
1846    }
1847}
1848
1849impl ::private::Sealed for RouteResponse {}
1850
1851impl From<RouteResponseProperties> for RouteResponse {
1852    fn from(properties: RouteResponseProperties) -> RouteResponse {
1853        RouteResponse { properties }
1854    }
1855}
1856
1857/// The [`AWS::ApiGatewayV2::Stage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html) resource type.
1858#[derive(Debug, Default)]
1859pub struct Stage {
1860    properties: StageProperties
1861}
1862
1863/// Properties for the `Stage` resource.
1864#[derive(Debug, Default)]
1865pub struct StageProperties {
1866    /// Property [`AccessLogSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesslogsettings).
1867    ///
1868    /// Update type: _Mutable_.
1869    /// AWS CloudFormation doesn't replace the resource when you change this property.
1870    pub access_log_settings: Option<::Value<self::stage::AccessLogSettings>>,
1871    /// Property [`AccessPolicyId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesspolicyid).
1872    ///
1873    /// Update type: _Mutable_.
1874    /// AWS CloudFormation doesn't replace the resource when you change this property.
1875    pub access_policy_id: Option<::Value<String>>,
1876    /// Property [`ApiId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-apiid).
1877    ///
1878    /// Update type: _Immutable_.
1879    /// AWS CloudFormation replaces the resource when you change this property.
1880    pub api_id: ::Value<String>,
1881    /// Property [`AutoDeploy`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-autodeploy).
1882    ///
1883    /// Update type: _Mutable_.
1884    /// AWS CloudFormation doesn't replace the resource when you change this property.
1885    pub auto_deploy: Option<::Value<bool>>,
1886    /// Property [`ClientCertificateId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-clientcertificateid).
1887    ///
1888    /// Update type: _Mutable_.
1889    /// AWS CloudFormation doesn't replace the resource when you change this property.
1890    pub client_certificate_id: Option<::Value<String>>,
1891    /// Property [`DefaultRouteSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-defaultroutesettings).
1892    ///
1893    /// Update type: _Mutable_.
1894    /// AWS CloudFormation doesn't replace the resource when you change this property.
1895    pub default_route_settings: Option<::Value<self::stage::RouteSettings>>,
1896    /// Property [`DeploymentId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-deploymentid).
1897    ///
1898    /// Update type: _Mutable_.
1899    /// AWS CloudFormation doesn't replace the resource when you change this property.
1900    pub deployment_id: Option<::Value<String>>,
1901    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-description).
1902    ///
1903    /// Update type: _Mutable_.
1904    /// AWS CloudFormation doesn't replace the resource when you change this property.
1905    pub description: Option<::Value<String>>,
1906    /// Property [`RouteSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-routesettings).
1907    ///
1908    /// Update type: _Mutable_.
1909    /// AWS CloudFormation doesn't replace the resource when you change this property.
1910    pub route_settings: Option<::Value<::json::Value>>,
1911    /// Property [`StageName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-stagename).
1912    ///
1913    /// Update type: _Immutable_.
1914    /// AWS CloudFormation replaces the resource when you change this property.
1915    pub stage_name: ::Value<String>,
1916    /// Property [`StageVariables`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-stagevariables).
1917    ///
1918    /// Update type: _Mutable_.
1919    /// AWS CloudFormation doesn't replace the resource when you change this property.
1920    pub stage_variables: Option<::Value<::json::Value>>,
1921    /// Property [`Tags`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-tags).
1922    ///
1923    /// Update type: _Mutable_.
1924    /// AWS CloudFormation doesn't replace the resource when you change this property.
1925    pub tags: Option<::Value<::json::Value>>,
1926}
1927
1928impl ::serde::Serialize for StageProperties {
1929    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1930        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1931        if let Some(ref access_log_settings) = self.access_log_settings {
1932            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AccessLogSettings", access_log_settings)?;
1933        }
1934        if let Some(ref access_policy_id) = self.access_policy_id {
1935            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AccessPolicyId", access_policy_id)?;
1936        }
1937        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ApiId", &self.api_id)?;
1938        if let Some(ref auto_deploy) = self.auto_deploy {
1939            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AutoDeploy", auto_deploy)?;
1940        }
1941        if let Some(ref client_certificate_id) = self.client_certificate_id {
1942            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ClientCertificateId", client_certificate_id)?;
1943        }
1944        if let Some(ref default_route_settings) = self.default_route_settings {
1945            ::serde::ser::SerializeMap::serialize_entry(&mut map, "DefaultRouteSettings", default_route_settings)?;
1946        }
1947        if let Some(ref deployment_id) = self.deployment_id {
1948            ::serde::ser::SerializeMap::serialize_entry(&mut map, "DeploymentId", deployment_id)?;
1949        }
1950        if let Some(ref description) = self.description {
1951            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
1952        }
1953        if let Some(ref route_settings) = self.route_settings {
1954            ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteSettings", route_settings)?;
1955        }
1956        ::serde::ser::SerializeMap::serialize_entry(&mut map, "StageName", &self.stage_name)?;
1957        if let Some(ref stage_variables) = self.stage_variables {
1958            ::serde::ser::SerializeMap::serialize_entry(&mut map, "StageVariables", stage_variables)?;
1959        }
1960        if let Some(ref tags) = self.tags {
1961            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Tags", tags)?;
1962        }
1963        ::serde::ser::SerializeMap::end(map)
1964    }
1965}
1966
1967impl<'de> ::serde::Deserialize<'de> for StageProperties {
1968    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<StageProperties, D::Error> {
1969        struct Visitor;
1970
1971        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1972            type Value = StageProperties;
1973
1974            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1975                write!(f, "a struct of type StageProperties")
1976            }
1977
1978            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1979                let mut access_log_settings: Option<::Value<self::stage::AccessLogSettings>> = None;
1980                let mut access_policy_id: Option<::Value<String>> = None;
1981                let mut api_id: Option<::Value<String>> = None;
1982                let mut auto_deploy: Option<::Value<bool>> = None;
1983                let mut client_certificate_id: Option<::Value<String>> = None;
1984                let mut default_route_settings: Option<::Value<self::stage::RouteSettings>> = None;
1985                let mut deployment_id: Option<::Value<String>> = None;
1986                let mut description: Option<::Value<String>> = None;
1987                let mut route_settings: Option<::Value<::json::Value>> = None;
1988                let mut stage_name: Option<::Value<String>> = None;
1989                let mut stage_variables: Option<::Value<::json::Value>> = None;
1990                let mut tags: Option<::Value<::json::Value>> = None;
1991
1992                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1993                    match __cfn_key.as_ref() {
1994                        "AccessLogSettings" => {
1995                            access_log_settings = ::serde::de::MapAccess::next_value(&mut map)?;
1996                        }
1997                        "AccessPolicyId" => {
1998                            access_policy_id = ::serde::de::MapAccess::next_value(&mut map)?;
1999                        }
2000                        "ApiId" => {
2001                            api_id = ::serde::de::MapAccess::next_value(&mut map)?;
2002                        }
2003                        "AutoDeploy" => {
2004                            auto_deploy = ::serde::de::MapAccess::next_value(&mut map)?;
2005                        }
2006                        "ClientCertificateId" => {
2007                            client_certificate_id = ::serde::de::MapAccess::next_value(&mut map)?;
2008                        }
2009                        "DefaultRouteSettings" => {
2010                            default_route_settings = ::serde::de::MapAccess::next_value(&mut map)?;
2011                        }
2012                        "DeploymentId" => {
2013                            deployment_id = ::serde::de::MapAccess::next_value(&mut map)?;
2014                        }
2015                        "Description" => {
2016                            description = ::serde::de::MapAccess::next_value(&mut map)?;
2017                        }
2018                        "RouteSettings" => {
2019                            route_settings = ::serde::de::MapAccess::next_value(&mut map)?;
2020                        }
2021                        "StageName" => {
2022                            stage_name = ::serde::de::MapAccess::next_value(&mut map)?;
2023                        }
2024                        "StageVariables" => {
2025                            stage_variables = ::serde::de::MapAccess::next_value(&mut map)?;
2026                        }
2027                        "Tags" => {
2028                            tags = ::serde::de::MapAccess::next_value(&mut map)?;
2029                        }
2030                        _ => {}
2031                    }
2032                }
2033
2034                Ok(StageProperties {
2035                    access_log_settings: access_log_settings,
2036                    access_policy_id: access_policy_id,
2037                    api_id: api_id.ok_or(::serde::de::Error::missing_field("ApiId"))?,
2038                    auto_deploy: auto_deploy,
2039                    client_certificate_id: client_certificate_id,
2040                    default_route_settings: default_route_settings,
2041                    deployment_id: deployment_id,
2042                    description: description,
2043                    route_settings: route_settings,
2044                    stage_name: stage_name.ok_or(::serde::de::Error::missing_field("StageName"))?,
2045                    stage_variables: stage_variables,
2046                    tags: tags,
2047                })
2048            }
2049        }
2050
2051        d.deserialize_map(Visitor)
2052    }
2053}
2054
2055impl ::Resource for Stage {
2056    type Properties = StageProperties;
2057    const TYPE: &'static str = "AWS::ApiGatewayV2::Stage";
2058    fn properties(&self) -> &StageProperties {
2059        &self.properties
2060    }
2061    fn properties_mut(&mut self) -> &mut StageProperties {
2062        &mut self.properties
2063    }
2064}
2065
2066impl ::private::Sealed for Stage {}
2067
2068impl From<StageProperties> for Stage {
2069    fn from(properties: StageProperties) -> Stage {
2070        Stage { properties }
2071    }
2072}
2073
2074/// The [`AWS::ApiGatewayV2::VpcLink`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-vpclink.html) resource type.
2075#[derive(Debug, Default)]
2076pub struct VpcLink {
2077    properties: VpcLinkProperties
2078}
2079
2080/// Properties for the `VpcLink` resource.
2081#[derive(Debug, Default)]
2082pub struct VpcLinkProperties {
2083    /// Property [`Name`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-vpclink.html#cfn-apigatewayv2-vpclink-name).
2084    ///
2085    /// Update type: _Mutable_.
2086    /// AWS CloudFormation doesn't replace the resource when you change this property.
2087    pub name: ::Value<String>,
2088    /// Property [`SecurityGroupIds`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-vpclink.html#cfn-apigatewayv2-vpclink-securitygroupids).
2089    ///
2090    /// Update type: _Immutable_.
2091    /// AWS CloudFormation replaces the resource when you change this property.
2092    pub security_group_ids: Option<::ValueList<String>>,
2093    /// Property [`SubnetIds`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-vpclink.html#cfn-apigatewayv2-vpclink-subnetids).
2094    ///
2095    /// Update type: _Immutable_.
2096    /// AWS CloudFormation replaces the resource when you change this property.
2097    pub subnet_ids: ::ValueList<String>,
2098    /// Property [`Tags`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-vpclink.html#cfn-apigatewayv2-vpclink-tags).
2099    ///
2100    /// Update type: _Mutable_.
2101    /// AWS CloudFormation doesn't replace the resource when you change this property.
2102    pub tags: Option<::Value<::json::Value>>,
2103}
2104
2105impl ::serde::Serialize for VpcLinkProperties {
2106    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2107        let mut map = ::serde::Serializer::serialize_map(s, None)?;
2108        ::serde::ser::SerializeMap::serialize_entry(&mut map, "Name", &self.name)?;
2109        if let Some(ref security_group_ids) = self.security_group_ids {
2110            ::serde::ser::SerializeMap::serialize_entry(&mut map, "SecurityGroupIds", security_group_ids)?;
2111        }
2112        ::serde::ser::SerializeMap::serialize_entry(&mut map, "SubnetIds", &self.subnet_ids)?;
2113        if let Some(ref tags) = self.tags {
2114            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Tags", tags)?;
2115        }
2116        ::serde::ser::SerializeMap::end(map)
2117    }
2118}
2119
2120impl<'de> ::serde::Deserialize<'de> for VpcLinkProperties {
2121    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<VpcLinkProperties, D::Error> {
2122        struct Visitor;
2123
2124        impl<'de> ::serde::de::Visitor<'de> for Visitor {
2125            type Value = VpcLinkProperties;
2126
2127            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2128                write!(f, "a struct of type VpcLinkProperties")
2129            }
2130
2131            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2132                let mut name: Option<::Value<String>> = None;
2133                let mut security_group_ids: Option<::ValueList<String>> = None;
2134                let mut subnet_ids: Option<::ValueList<String>> = None;
2135                let mut tags: Option<::Value<::json::Value>> = None;
2136
2137                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2138                    match __cfn_key.as_ref() {
2139                        "Name" => {
2140                            name = ::serde::de::MapAccess::next_value(&mut map)?;
2141                        }
2142                        "SecurityGroupIds" => {
2143                            security_group_ids = ::serde::de::MapAccess::next_value(&mut map)?;
2144                        }
2145                        "SubnetIds" => {
2146                            subnet_ids = ::serde::de::MapAccess::next_value(&mut map)?;
2147                        }
2148                        "Tags" => {
2149                            tags = ::serde::de::MapAccess::next_value(&mut map)?;
2150                        }
2151                        _ => {}
2152                    }
2153                }
2154
2155                Ok(VpcLinkProperties {
2156                    name: name.ok_or(::serde::de::Error::missing_field("Name"))?,
2157                    security_group_ids: security_group_ids,
2158                    subnet_ids: subnet_ids.ok_or(::serde::de::Error::missing_field("SubnetIds"))?,
2159                    tags: tags,
2160                })
2161            }
2162        }
2163
2164        d.deserialize_map(Visitor)
2165    }
2166}
2167
2168impl ::Resource for VpcLink {
2169    type Properties = VpcLinkProperties;
2170    const TYPE: &'static str = "AWS::ApiGatewayV2::VpcLink";
2171    fn properties(&self) -> &VpcLinkProperties {
2172        &self.properties
2173    }
2174    fn properties_mut(&mut self) -> &mut VpcLinkProperties {
2175        &mut self.properties
2176    }
2177}
2178
2179impl ::private::Sealed for VpcLink {}
2180
2181impl From<VpcLinkProperties> for VpcLink {
2182    fn from(properties: VpcLinkProperties) -> VpcLink {
2183        VpcLink { properties }
2184    }
2185}
2186
2187pub mod api {
2188    //! Property types for the `Api` resource.
2189
2190    /// The [`AWS::ApiGatewayV2::Api.BodyS3Location`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-bodys3location.html) property type.
2191    #[derive(Debug, Default)]
2192    pub struct BodyS3Location {
2193        /// Property [`Bucket`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-bodys3location.html#cfn-apigatewayv2-api-bodys3location-bucket).
2194        ///
2195        /// Update type: _Mutable_.
2196        /// AWS CloudFormation doesn't replace the resource when you change this property.
2197        pub bucket: Option<::Value<String>>,
2198        /// Property [`Etag`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-bodys3location.html#cfn-apigatewayv2-api-bodys3location-etag).
2199        ///
2200        /// Update type: _Mutable_.
2201        /// AWS CloudFormation doesn't replace the resource when you change this property.
2202        pub etag: Option<::Value<String>>,
2203        /// Property [`Key`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-bodys3location.html#cfn-apigatewayv2-api-bodys3location-key).
2204        ///
2205        /// Update type: _Mutable_.
2206        /// AWS CloudFormation doesn't replace the resource when you change this property.
2207        pub key: Option<::Value<String>>,
2208        /// Property [`Version`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-bodys3location.html#cfn-apigatewayv2-api-bodys3location-version).
2209        ///
2210        /// Update type: _Mutable_.
2211        /// AWS CloudFormation doesn't replace the resource when you change this property.
2212        pub version: Option<::Value<String>>,
2213    }
2214
2215    impl ::codec::SerializeValue for BodyS3Location {
2216        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2217            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2218            if let Some(ref bucket) = self.bucket {
2219                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Bucket", bucket)?;
2220            }
2221            if let Some(ref etag) = self.etag {
2222                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Etag", etag)?;
2223            }
2224            if let Some(ref key) = self.key {
2225                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Key", key)?;
2226            }
2227            if let Some(ref version) = self.version {
2228                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Version", version)?;
2229            }
2230            ::serde::ser::SerializeMap::end(map)
2231        }
2232    }
2233
2234    impl ::codec::DeserializeValue for BodyS3Location {
2235        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<BodyS3Location, D::Error> {
2236            struct Visitor;
2237
2238            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2239                type Value = BodyS3Location;
2240
2241                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2242                    write!(f, "a struct of type BodyS3Location")
2243                }
2244
2245                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2246                    let mut bucket: Option<::Value<String>> = None;
2247                    let mut etag: Option<::Value<String>> = None;
2248                    let mut key: Option<::Value<String>> = None;
2249                    let mut version: Option<::Value<String>> = None;
2250
2251                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2252                        match __cfn_key.as_ref() {
2253                            "Bucket" => {
2254                                bucket = ::serde::de::MapAccess::next_value(&mut map)?;
2255                            }
2256                            "Etag" => {
2257                                etag = ::serde::de::MapAccess::next_value(&mut map)?;
2258                            }
2259                            "Key" => {
2260                                key = ::serde::de::MapAccess::next_value(&mut map)?;
2261                            }
2262                            "Version" => {
2263                                version = ::serde::de::MapAccess::next_value(&mut map)?;
2264                            }
2265                            _ => {}
2266                        }
2267                    }
2268
2269                    Ok(BodyS3Location {
2270                        bucket: bucket,
2271                        etag: etag,
2272                        key: key,
2273                        version: version,
2274                    })
2275                }
2276            }
2277
2278            d.deserialize_map(Visitor)
2279        }
2280    }
2281
2282    /// The [`AWS::ApiGatewayV2::Api.Cors`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html) property type.
2283    #[derive(Debug, Default)]
2284    pub struct Cors {
2285        /// Property [`AllowCredentials`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html#cfn-apigatewayv2-api-cors-allowcredentials).
2286        ///
2287        /// Update type: _Mutable_.
2288        /// AWS CloudFormation doesn't replace the resource when you change this property.
2289        pub allow_credentials: Option<::Value<bool>>,
2290        /// Property [`AllowHeaders`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html#cfn-apigatewayv2-api-cors-allowheaders).
2291        ///
2292        /// Update type: _Mutable_.
2293        /// AWS CloudFormation doesn't replace the resource when you change this property.
2294        pub allow_headers: Option<::ValueList<String>>,
2295        /// Property [`AllowMethods`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html#cfn-apigatewayv2-api-cors-allowmethods).
2296        ///
2297        /// Update type: _Mutable_.
2298        /// AWS CloudFormation doesn't replace the resource when you change this property.
2299        pub allow_methods: Option<::ValueList<String>>,
2300        /// Property [`AllowOrigins`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html#cfn-apigatewayv2-api-cors-alloworigins).
2301        ///
2302        /// Update type: _Mutable_.
2303        /// AWS CloudFormation doesn't replace the resource when you change this property.
2304        pub allow_origins: Option<::ValueList<String>>,
2305        /// Property [`ExposeHeaders`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html#cfn-apigatewayv2-api-cors-exposeheaders).
2306        ///
2307        /// Update type: _Mutable_.
2308        /// AWS CloudFormation doesn't replace the resource when you change this property.
2309        pub expose_headers: Option<::ValueList<String>>,
2310        /// Property [`MaxAge`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-cors.html#cfn-apigatewayv2-api-cors-maxage).
2311        ///
2312        /// Update type: _Mutable_.
2313        /// AWS CloudFormation doesn't replace the resource when you change this property.
2314        pub max_age: Option<::Value<u32>>,
2315    }
2316
2317    impl ::codec::SerializeValue for Cors {
2318        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2319            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2320            if let Some(ref allow_credentials) = self.allow_credentials {
2321                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AllowCredentials", allow_credentials)?;
2322            }
2323            if let Some(ref allow_headers) = self.allow_headers {
2324                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AllowHeaders", allow_headers)?;
2325            }
2326            if let Some(ref allow_methods) = self.allow_methods {
2327                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AllowMethods", allow_methods)?;
2328            }
2329            if let Some(ref allow_origins) = self.allow_origins {
2330                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AllowOrigins", allow_origins)?;
2331            }
2332            if let Some(ref expose_headers) = self.expose_headers {
2333                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ExposeHeaders", expose_headers)?;
2334            }
2335            if let Some(ref max_age) = self.max_age {
2336                ::serde::ser::SerializeMap::serialize_entry(&mut map, "MaxAge", max_age)?;
2337            }
2338            ::serde::ser::SerializeMap::end(map)
2339        }
2340    }
2341
2342    impl ::codec::DeserializeValue for Cors {
2343        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<Cors, D::Error> {
2344            struct Visitor;
2345
2346            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2347                type Value = Cors;
2348
2349                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2350                    write!(f, "a struct of type Cors")
2351                }
2352
2353                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2354                    let mut allow_credentials: Option<::Value<bool>> = None;
2355                    let mut allow_headers: Option<::ValueList<String>> = None;
2356                    let mut allow_methods: Option<::ValueList<String>> = None;
2357                    let mut allow_origins: Option<::ValueList<String>> = None;
2358                    let mut expose_headers: Option<::ValueList<String>> = None;
2359                    let mut max_age: Option<::Value<u32>> = None;
2360
2361                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2362                        match __cfn_key.as_ref() {
2363                            "AllowCredentials" => {
2364                                allow_credentials = ::serde::de::MapAccess::next_value(&mut map)?;
2365                            }
2366                            "AllowHeaders" => {
2367                                allow_headers = ::serde::de::MapAccess::next_value(&mut map)?;
2368                            }
2369                            "AllowMethods" => {
2370                                allow_methods = ::serde::de::MapAccess::next_value(&mut map)?;
2371                            }
2372                            "AllowOrigins" => {
2373                                allow_origins = ::serde::de::MapAccess::next_value(&mut map)?;
2374                            }
2375                            "ExposeHeaders" => {
2376                                expose_headers = ::serde::de::MapAccess::next_value(&mut map)?;
2377                            }
2378                            "MaxAge" => {
2379                                max_age = ::serde::de::MapAccess::next_value(&mut map)?;
2380                            }
2381                            _ => {}
2382                        }
2383                    }
2384
2385                    Ok(Cors {
2386                        allow_credentials: allow_credentials,
2387                        allow_headers: allow_headers,
2388                        allow_methods: allow_methods,
2389                        allow_origins: allow_origins,
2390                        expose_headers: expose_headers,
2391                        max_age: max_age,
2392                    })
2393                }
2394            }
2395
2396            d.deserialize_map(Visitor)
2397        }
2398    }
2399}
2400
2401pub mod api_gateway_managed_overrides {
2402    //! Property types for the `ApiGatewayManagedOverrides` resource.
2403
2404    /// The [`AWS::ApiGatewayV2::ApiGatewayManagedOverrides.AccessLogSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-accesslogsettings.html) property type.
2405    #[derive(Debug, Default)]
2406    pub struct AccessLogSettings {
2407        /// Property [`DestinationArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-accesslogsettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-accesslogsettings-destinationarn).
2408        ///
2409        /// Update type: _Mutable_.
2410        /// AWS CloudFormation doesn't replace the resource when you change this property.
2411        pub destination_arn: Option<::Value<String>>,
2412        /// Property [`Format`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-accesslogsettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-accesslogsettings-format).
2413        ///
2414        /// Update type: _Mutable_.
2415        /// AWS CloudFormation doesn't replace the resource when you change this property.
2416        pub format: Option<::Value<String>>,
2417    }
2418
2419    impl ::codec::SerializeValue for AccessLogSettings {
2420        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2421            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2422            if let Some(ref destination_arn) = self.destination_arn {
2423                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DestinationArn", destination_arn)?;
2424            }
2425            if let Some(ref format) = self.format {
2426                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Format", format)?;
2427            }
2428            ::serde::ser::SerializeMap::end(map)
2429        }
2430    }
2431
2432    impl ::codec::DeserializeValue for AccessLogSettings {
2433        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<AccessLogSettings, D::Error> {
2434            struct Visitor;
2435
2436            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2437                type Value = AccessLogSettings;
2438
2439                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2440                    write!(f, "a struct of type AccessLogSettings")
2441                }
2442
2443                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2444                    let mut destination_arn: Option<::Value<String>> = None;
2445                    let mut format: Option<::Value<String>> = None;
2446
2447                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2448                        match __cfn_key.as_ref() {
2449                            "DestinationArn" => {
2450                                destination_arn = ::serde::de::MapAccess::next_value(&mut map)?;
2451                            }
2452                            "Format" => {
2453                                format = ::serde::de::MapAccess::next_value(&mut map)?;
2454                            }
2455                            _ => {}
2456                        }
2457                    }
2458
2459                    Ok(AccessLogSettings {
2460                        destination_arn: destination_arn,
2461                        format: format,
2462                    })
2463                }
2464            }
2465
2466            d.deserialize_map(Visitor)
2467        }
2468    }
2469
2470    /// The [`AWS::ApiGatewayV2::ApiGatewayManagedOverrides.IntegrationOverrides`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides.html) property type.
2471    #[derive(Debug, Default)]
2472    pub struct IntegrationOverrides {
2473        /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides-description).
2474        ///
2475        /// Update type: _Mutable_.
2476        /// AWS CloudFormation doesn't replace the resource when you change this property.
2477        pub description: Option<::Value<String>>,
2478        /// Property [`IntegrationMethod`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides-integrationmethod).
2479        ///
2480        /// Update type: _Mutable_.
2481        /// AWS CloudFormation doesn't replace the resource when you change this property.
2482        pub integration_method: Option<::Value<String>>,
2483        /// Property [`PayloadFormatVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides-payloadformatversion).
2484        ///
2485        /// Update type: _Mutable_.
2486        /// AWS CloudFormation doesn't replace the resource when you change this property.
2487        pub payload_format_version: Option<::Value<String>>,
2488        /// Property [`TimeoutInMillis`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-integrationoverrides-timeoutinmillis).
2489        ///
2490        /// Update type: _Mutable_.
2491        /// AWS CloudFormation doesn't replace the resource when you change this property.
2492        pub timeout_in_millis: Option<::Value<u32>>,
2493    }
2494
2495    impl ::codec::SerializeValue for IntegrationOverrides {
2496        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2497            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2498            if let Some(ref description) = self.description {
2499                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
2500            }
2501            if let Some(ref integration_method) = self.integration_method {
2502                ::serde::ser::SerializeMap::serialize_entry(&mut map, "IntegrationMethod", integration_method)?;
2503            }
2504            if let Some(ref payload_format_version) = self.payload_format_version {
2505                ::serde::ser::SerializeMap::serialize_entry(&mut map, "PayloadFormatVersion", payload_format_version)?;
2506            }
2507            if let Some(ref timeout_in_millis) = self.timeout_in_millis {
2508                ::serde::ser::SerializeMap::serialize_entry(&mut map, "TimeoutInMillis", timeout_in_millis)?;
2509            }
2510            ::serde::ser::SerializeMap::end(map)
2511        }
2512    }
2513
2514    impl ::codec::DeserializeValue for IntegrationOverrides {
2515        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<IntegrationOverrides, D::Error> {
2516            struct Visitor;
2517
2518            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2519                type Value = IntegrationOverrides;
2520
2521                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2522                    write!(f, "a struct of type IntegrationOverrides")
2523                }
2524
2525                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2526                    let mut description: Option<::Value<String>> = None;
2527                    let mut integration_method: Option<::Value<String>> = None;
2528                    let mut payload_format_version: Option<::Value<String>> = None;
2529                    let mut timeout_in_millis: Option<::Value<u32>> = None;
2530
2531                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2532                        match __cfn_key.as_ref() {
2533                            "Description" => {
2534                                description = ::serde::de::MapAccess::next_value(&mut map)?;
2535                            }
2536                            "IntegrationMethod" => {
2537                                integration_method = ::serde::de::MapAccess::next_value(&mut map)?;
2538                            }
2539                            "PayloadFormatVersion" => {
2540                                payload_format_version = ::serde::de::MapAccess::next_value(&mut map)?;
2541                            }
2542                            "TimeoutInMillis" => {
2543                                timeout_in_millis = ::serde::de::MapAccess::next_value(&mut map)?;
2544                            }
2545                            _ => {}
2546                        }
2547                    }
2548
2549                    Ok(IntegrationOverrides {
2550                        description: description,
2551                        integration_method: integration_method,
2552                        payload_format_version: payload_format_version,
2553                        timeout_in_millis: timeout_in_millis,
2554                    })
2555                }
2556            }
2557
2558            d.deserialize_map(Visitor)
2559        }
2560    }
2561
2562    /// The [`AWS::ApiGatewayV2::ApiGatewayManagedOverrides.RouteOverrides`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routeoverrides.html) property type.
2563    #[derive(Debug, Default)]
2564    pub struct RouteOverrides {
2565        /// Property [`AuthorizationScopes`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routeoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routeoverrides-authorizationscopes).
2566        ///
2567        /// Update type: _Mutable_.
2568        /// AWS CloudFormation doesn't replace the resource when you change this property.
2569        pub authorization_scopes: Option<::ValueList<String>>,
2570        /// Property [`AuthorizationType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routeoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routeoverrides-authorizationtype).
2571        ///
2572        /// Update type: _Mutable_.
2573        /// AWS CloudFormation doesn't replace the resource when you change this property.
2574        pub authorization_type: Option<::Value<String>>,
2575        /// Property [`AuthorizerId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routeoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routeoverrides-authorizerid).
2576        ///
2577        /// Update type: _Mutable_.
2578        /// AWS CloudFormation doesn't replace the resource when you change this property.
2579        pub authorizer_id: Option<::Value<String>>,
2580        /// Property [`OperationName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routeoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routeoverrides-operationname).
2581        ///
2582        /// Update type: _Mutable_.
2583        /// AWS CloudFormation doesn't replace the resource when you change this property.
2584        pub operation_name: Option<::Value<String>>,
2585        /// Property [`Target`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routeoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routeoverrides-target).
2586        ///
2587        /// Update type: _Mutable_.
2588        /// AWS CloudFormation doesn't replace the resource when you change this property.
2589        pub target: Option<::Value<String>>,
2590    }
2591
2592    impl ::codec::SerializeValue for RouteOverrides {
2593        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2594            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2595            if let Some(ref authorization_scopes) = self.authorization_scopes {
2596                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizationScopes", authorization_scopes)?;
2597            }
2598            if let Some(ref authorization_type) = self.authorization_type {
2599                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizationType", authorization_type)?;
2600            }
2601            if let Some(ref authorizer_id) = self.authorizer_id {
2602                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AuthorizerId", authorizer_id)?;
2603            }
2604            if let Some(ref operation_name) = self.operation_name {
2605                ::serde::ser::SerializeMap::serialize_entry(&mut map, "OperationName", operation_name)?;
2606            }
2607            if let Some(ref target) = self.target {
2608                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Target", target)?;
2609            }
2610            ::serde::ser::SerializeMap::end(map)
2611        }
2612    }
2613
2614    impl ::codec::DeserializeValue for RouteOverrides {
2615        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<RouteOverrides, D::Error> {
2616            struct Visitor;
2617
2618            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2619                type Value = RouteOverrides;
2620
2621                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2622                    write!(f, "a struct of type RouteOverrides")
2623                }
2624
2625                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2626                    let mut authorization_scopes: Option<::ValueList<String>> = None;
2627                    let mut authorization_type: Option<::Value<String>> = None;
2628                    let mut authorizer_id: Option<::Value<String>> = None;
2629                    let mut operation_name: Option<::Value<String>> = None;
2630                    let mut target: Option<::Value<String>> = None;
2631
2632                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2633                        match __cfn_key.as_ref() {
2634                            "AuthorizationScopes" => {
2635                                authorization_scopes = ::serde::de::MapAccess::next_value(&mut map)?;
2636                            }
2637                            "AuthorizationType" => {
2638                                authorization_type = ::serde::de::MapAccess::next_value(&mut map)?;
2639                            }
2640                            "AuthorizerId" => {
2641                                authorizer_id = ::serde::de::MapAccess::next_value(&mut map)?;
2642                            }
2643                            "OperationName" => {
2644                                operation_name = ::serde::de::MapAccess::next_value(&mut map)?;
2645                            }
2646                            "Target" => {
2647                                target = ::serde::de::MapAccess::next_value(&mut map)?;
2648                            }
2649                            _ => {}
2650                        }
2651                    }
2652
2653                    Ok(RouteOverrides {
2654                        authorization_scopes: authorization_scopes,
2655                        authorization_type: authorization_type,
2656                        authorizer_id: authorizer_id,
2657                        operation_name: operation_name,
2658                        target: target,
2659                    })
2660                }
2661            }
2662
2663            d.deserialize_map(Visitor)
2664        }
2665    }
2666
2667    /// The [`AWS::ApiGatewayV2::ApiGatewayManagedOverrides.RouteSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routesettings.html) property type.
2668    #[derive(Debug, Default)]
2669    pub struct RouteSettings {
2670        /// Property [`DataTraceEnabled`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routesettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routesettings-datatraceenabled).
2671        ///
2672        /// Update type: _Mutable_.
2673        /// AWS CloudFormation doesn't replace the resource when you change this property.
2674        pub data_trace_enabled: Option<::Value<bool>>,
2675        /// Property [`DetailedMetricsEnabled`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routesettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routesettings-detailedmetricsenabled).
2676        ///
2677        /// Update type: _Mutable_.
2678        /// AWS CloudFormation doesn't replace the resource when you change this property.
2679        pub detailed_metrics_enabled: Option<::Value<bool>>,
2680        /// Property [`LoggingLevel`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routesettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routesettings-logginglevel).
2681        ///
2682        /// Update type: _Mutable_.
2683        /// AWS CloudFormation doesn't replace the resource when you change this property.
2684        pub logging_level: Option<::Value<String>>,
2685        /// Property [`ThrottlingBurstLimit`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routesettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routesettings-throttlingburstlimit).
2686        ///
2687        /// Update type: _Mutable_.
2688        /// AWS CloudFormation doesn't replace the resource when you change this property.
2689        pub throttling_burst_limit: Option<::Value<u32>>,
2690        /// Property [`ThrottlingRateLimit`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-routesettings.html#cfn-apigatewayv2-apigatewaymanagedoverrides-routesettings-throttlingratelimit).
2691        ///
2692        /// Update type: _Mutable_.
2693        /// AWS CloudFormation doesn't replace the resource when you change this property.
2694        pub throttling_rate_limit: Option<::Value<f64>>,
2695    }
2696
2697    impl ::codec::SerializeValue for RouteSettings {
2698        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2699            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2700            if let Some(ref data_trace_enabled) = self.data_trace_enabled {
2701                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DataTraceEnabled", data_trace_enabled)?;
2702            }
2703            if let Some(ref detailed_metrics_enabled) = self.detailed_metrics_enabled {
2704                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DetailedMetricsEnabled", detailed_metrics_enabled)?;
2705            }
2706            if let Some(ref logging_level) = self.logging_level {
2707                ::serde::ser::SerializeMap::serialize_entry(&mut map, "LoggingLevel", logging_level)?;
2708            }
2709            if let Some(ref throttling_burst_limit) = self.throttling_burst_limit {
2710                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ThrottlingBurstLimit", throttling_burst_limit)?;
2711            }
2712            if let Some(ref throttling_rate_limit) = self.throttling_rate_limit {
2713                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ThrottlingRateLimit", throttling_rate_limit)?;
2714            }
2715            ::serde::ser::SerializeMap::end(map)
2716        }
2717    }
2718
2719    impl ::codec::DeserializeValue for RouteSettings {
2720        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<RouteSettings, D::Error> {
2721            struct Visitor;
2722
2723            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2724                type Value = RouteSettings;
2725
2726                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2727                    write!(f, "a struct of type RouteSettings")
2728                }
2729
2730                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2731                    let mut data_trace_enabled: Option<::Value<bool>> = None;
2732                    let mut detailed_metrics_enabled: Option<::Value<bool>> = None;
2733                    let mut logging_level: Option<::Value<String>> = None;
2734                    let mut throttling_burst_limit: Option<::Value<u32>> = None;
2735                    let mut throttling_rate_limit: Option<::Value<f64>> = None;
2736
2737                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2738                        match __cfn_key.as_ref() {
2739                            "DataTraceEnabled" => {
2740                                data_trace_enabled = ::serde::de::MapAccess::next_value(&mut map)?;
2741                            }
2742                            "DetailedMetricsEnabled" => {
2743                                detailed_metrics_enabled = ::serde::de::MapAccess::next_value(&mut map)?;
2744                            }
2745                            "LoggingLevel" => {
2746                                logging_level = ::serde::de::MapAccess::next_value(&mut map)?;
2747                            }
2748                            "ThrottlingBurstLimit" => {
2749                                throttling_burst_limit = ::serde::de::MapAccess::next_value(&mut map)?;
2750                            }
2751                            "ThrottlingRateLimit" => {
2752                                throttling_rate_limit = ::serde::de::MapAccess::next_value(&mut map)?;
2753                            }
2754                            _ => {}
2755                        }
2756                    }
2757
2758                    Ok(RouteSettings {
2759                        data_trace_enabled: data_trace_enabled,
2760                        detailed_metrics_enabled: detailed_metrics_enabled,
2761                        logging_level: logging_level,
2762                        throttling_burst_limit: throttling_burst_limit,
2763                        throttling_rate_limit: throttling_rate_limit,
2764                    })
2765                }
2766            }
2767
2768            d.deserialize_map(Visitor)
2769        }
2770    }
2771
2772    /// The [`AWS::ApiGatewayV2::ApiGatewayManagedOverrides.StageOverrides`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html) property type.
2773    #[derive(Debug, Default)]
2774    pub struct StageOverrides {
2775        /// Property [`AccessLogSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stageoverrides-accesslogsettings).
2776        ///
2777        /// Update type: _Mutable_.
2778        /// AWS CloudFormation doesn't replace the resource when you change this property.
2779        pub access_log_settings: Option<::Value<AccessLogSettings>>,
2780        /// Property [`AutoDeploy`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stageoverrides-autodeploy).
2781        ///
2782        /// Update type: _Mutable_.
2783        /// AWS CloudFormation doesn't replace the resource when you change this property.
2784        pub auto_deploy: Option<::Value<bool>>,
2785        /// Property [`DefaultRouteSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stageoverrides-defaultroutesettings).
2786        ///
2787        /// Update type: _Mutable_.
2788        /// AWS CloudFormation doesn't replace the resource when you change this property.
2789        pub default_route_settings: Option<::Value<RouteSettings>>,
2790        /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stageoverrides-description).
2791        ///
2792        /// Update type: _Mutable_.
2793        /// AWS CloudFormation doesn't replace the resource when you change this property.
2794        pub description: Option<::Value<String>>,
2795        /// Property [`RouteSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stageoverrides-routesettings).
2796        ///
2797        /// Update type: _Mutable_.
2798        /// AWS CloudFormation doesn't replace the resource when you change this property.
2799        pub route_settings: Option<::Value<::json::Value>>,
2800        /// Property [`StageVariables`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-apigatewaymanagedoverrides-stageoverrides.html#cfn-apigatewayv2-apigatewaymanagedoverrides-stageoverrides-stagevariables).
2801        ///
2802        /// Update type: _Mutable_.
2803        /// AWS CloudFormation doesn't replace the resource when you change this property.
2804        pub stage_variables: Option<::Value<::json::Value>>,
2805    }
2806
2807    impl ::codec::SerializeValue for StageOverrides {
2808        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2809            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2810            if let Some(ref access_log_settings) = self.access_log_settings {
2811                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AccessLogSettings", access_log_settings)?;
2812            }
2813            if let Some(ref auto_deploy) = self.auto_deploy {
2814                ::serde::ser::SerializeMap::serialize_entry(&mut map, "AutoDeploy", auto_deploy)?;
2815            }
2816            if let Some(ref default_route_settings) = self.default_route_settings {
2817                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DefaultRouteSettings", default_route_settings)?;
2818            }
2819            if let Some(ref description) = self.description {
2820                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
2821            }
2822            if let Some(ref route_settings) = self.route_settings {
2823                ::serde::ser::SerializeMap::serialize_entry(&mut map, "RouteSettings", route_settings)?;
2824            }
2825            if let Some(ref stage_variables) = self.stage_variables {
2826                ::serde::ser::SerializeMap::serialize_entry(&mut map, "StageVariables", stage_variables)?;
2827            }
2828            ::serde::ser::SerializeMap::end(map)
2829        }
2830    }
2831
2832    impl ::codec::DeserializeValue for StageOverrides {
2833        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<StageOverrides, D::Error> {
2834            struct Visitor;
2835
2836            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2837                type Value = StageOverrides;
2838
2839                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2840                    write!(f, "a struct of type StageOverrides")
2841                }
2842
2843                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2844                    let mut access_log_settings: Option<::Value<AccessLogSettings>> = None;
2845                    let mut auto_deploy: Option<::Value<bool>> = None;
2846                    let mut default_route_settings: Option<::Value<RouteSettings>> = None;
2847                    let mut description: Option<::Value<String>> = None;
2848                    let mut route_settings: Option<::Value<::json::Value>> = None;
2849                    let mut stage_variables: Option<::Value<::json::Value>> = None;
2850
2851                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2852                        match __cfn_key.as_ref() {
2853                            "AccessLogSettings" => {
2854                                access_log_settings = ::serde::de::MapAccess::next_value(&mut map)?;
2855                            }
2856                            "AutoDeploy" => {
2857                                auto_deploy = ::serde::de::MapAccess::next_value(&mut map)?;
2858                            }
2859                            "DefaultRouteSettings" => {
2860                                default_route_settings = ::serde::de::MapAccess::next_value(&mut map)?;
2861                            }
2862                            "Description" => {
2863                                description = ::serde::de::MapAccess::next_value(&mut map)?;
2864                            }
2865                            "RouteSettings" => {
2866                                route_settings = ::serde::de::MapAccess::next_value(&mut map)?;
2867                            }
2868                            "StageVariables" => {
2869                                stage_variables = ::serde::de::MapAccess::next_value(&mut map)?;
2870                            }
2871                            _ => {}
2872                        }
2873                    }
2874
2875                    Ok(StageOverrides {
2876                        access_log_settings: access_log_settings,
2877                        auto_deploy: auto_deploy,
2878                        default_route_settings: default_route_settings,
2879                        description: description,
2880                        route_settings: route_settings,
2881                        stage_variables: stage_variables,
2882                    })
2883                }
2884            }
2885
2886            d.deserialize_map(Visitor)
2887        }
2888    }
2889}
2890
2891pub mod authorizer {
2892    //! Property types for the `Authorizer` resource.
2893
2894    /// The [`AWS::ApiGatewayV2::Authorizer.JWTConfiguration`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-authorizer-jwtconfiguration.html) property type.
2895    #[derive(Debug, Default)]
2896    pub struct JWTConfiguration {
2897        /// Property [`Audience`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-authorizer-jwtconfiguration.html#cfn-apigatewayv2-authorizer-jwtconfiguration-audience).
2898        ///
2899        /// Update type: _Mutable_.
2900        /// AWS CloudFormation doesn't replace the resource when you change this property.
2901        pub audience: Option<::ValueList<String>>,
2902        /// Property [`Issuer`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-authorizer-jwtconfiguration.html#cfn-apigatewayv2-authorizer-jwtconfiguration-issuer).
2903        ///
2904        /// Update type: _Mutable_.
2905        /// AWS CloudFormation doesn't replace the resource when you change this property.
2906        pub issuer: Option<::Value<String>>,
2907    }
2908
2909    impl ::codec::SerializeValue for JWTConfiguration {
2910        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2911            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2912            if let Some(ref audience) = self.audience {
2913                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Audience", audience)?;
2914            }
2915            if let Some(ref issuer) = self.issuer {
2916                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Issuer", issuer)?;
2917            }
2918            ::serde::ser::SerializeMap::end(map)
2919        }
2920    }
2921
2922    impl ::codec::DeserializeValue for JWTConfiguration {
2923        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<JWTConfiguration, D::Error> {
2924            struct Visitor;
2925
2926            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2927                type Value = JWTConfiguration;
2928
2929                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2930                    write!(f, "a struct of type JWTConfiguration")
2931                }
2932
2933                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2934                    let mut audience: Option<::ValueList<String>> = None;
2935                    let mut issuer: Option<::Value<String>> = None;
2936
2937                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2938                        match __cfn_key.as_ref() {
2939                            "Audience" => {
2940                                audience = ::serde::de::MapAccess::next_value(&mut map)?;
2941                            }
2942                            "Issuer" => {
2943                                issuer = ::serde::de::MapAccess::next_value(&mut map)?;
2944                            }
2945                            _ => {}
2946                        }
2947                    }
2948
2949                    Ok(JWTConfiguration {
2950                        audience: audience,
2951                        issuer: issuer,
2952                    })
2953                }
2954            }
2955
2956            d.deserialize_map(Visitor)
2957        }
2958    }
2959}
2960
2961pub mod domain_name {
2962    //! Property types for the `DomainName` resource.
2963
2964    /// The [`AWS::ApiGatewayV2::DomainName.DomainNameConfiguration`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-domainnameconfiguration.html) property type.
2965    #[derive(Debug, Default)]
2966    pub struct DomainNameConfiguration {
2967        /// Property [`CertificateArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-domainnameconfiguration.html#cfn-apigatewayv2-domainname-domainnameconfiguration-certificatearn).
2968        ///
2969        /// Update type: _Mutable_.
2970        /// AWS CloudFormation doesn't replace the resource when you change this property.
2971        pub certificate_arn: Option<::Value<String>>,
2972        /// Property [`CertificateName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-domainnameconfiguration.html#cfn-apigatewayv2-domainname-domainnameconfiguration-certificatename).
2973        ///
2974        /// Update type: _Mutable_.
2975        /// AWS CloudFormation doesn't replace the resource when you change this property.
2976        pub certificate_name: Option<::Value<String>>,
2977        /// Property [`EndpointType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-domainnameconfiguration.html#cfn-apigatewayv2-domainname-domainnameconfiguration-endpointtype).
2978        ///
2979        /// Update type: _Mutable_.
2980        /// AWS CloudFormation doesn't replace the resource when you change this property.
2981        pub endpoint_type: Option<::Value<String>>,
2982        /// Property [`SecurityPolicy`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-domainnameconfiguration.html#cfn-apigatewayv2-domainname-domainnameconfiguration-securitypolicy).
2983        ///
2984        /// Update type: _Mutable_.
2985        /// AWS CloudFormation doesn't replace the resource when you change this property.
2986        pub security_policy: Option<::Value<String>>,
2987    }
2988
2989    impl ::codec::SerializeValue for DomainNameConfiguration {
2990        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2991            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2992            if let Some(ref certificate_arn) = self.certificate_arn {
2993                ::serde::ser::SerializeMap::serialize_entry(&mut map, "CertificateArn", certificate_arn)?;
2994            }
2995            if let Some(ref certificate_name) = self.certificate_name {
2996                ::serde::ser::SerializeMap::serialize_entry(&mut map, "CertificateName", certificate_name)?;
2997            }
2998            if let Some(ref endpoint_type) = self.endpoint_type {
2999                ::serde::ser::SerializeMap::serialize_entry(&mut map, "EndpointType", endpoint_type)?;
3000            }
3001            if let Some(ref security_policy) = self.security_policy {
3002                ::serde::ser::SerializeMap::serialize_entry(&mut map, "SecurityPolicy", security_policy)?;
3003            }
3004            ::serde::ser::SerializeMap::end(map)
3005        }
3006    }
3007
3008    impl ::codec::DeserializeValue for DomainNameConfiguration {
3009        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<DomainNameConfiguration, D::Error> {
3010            struct Visitor;
3011
3012            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3013                type Value = DomainNameConfiguration;
3014
3015                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3016                    write!(f, "a struct of type DomainNameConfiguration")
3017                }
3018
3019                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3020                    let mut certificate_arn: Option<::Value<String>> = None;
3021                    let mut certificate_name: Option<::Value<String>> = None;
3022                    let mut endpoint_type: Option<::Value<String>> = None;
3023                    let mut security_policy: Option<::Value<String>> = None;
3024
3025                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3026                        match __cfn_key.as_ref() {
3027                            "CertificateArn" => {
3028                                certificate_arn = ::serde::de::MapAccess::next_value(&mut map)?;
3029                            }
3030                            "CertificateName" => {
3031                                certificate_name = ::serde::de::MapAccess::next_value(&mut map)?;
3032                            }
3033                            "EndpointType" => {
3034                                endpoint_type = ::serde::de::MapAccess::next_value(&mut map)?;
3035                            }
3036                            "SecurityPolicy" => {
3037                                security_policy = ::serde::de::MapAccess::next_value(&mut map)?;
3038                            }
3039                            _ => {}
3040                        }
3041                    }
3042
3043                    Ok(DomainNameConfiguration {
3044                        certificate_arn: certificate_arn,
3045                        certificate_name: certificate_name,
3046                        endpoint_type: endpoint_type,
3047                        security_policy: security_policy,
3048                    })
3049                }
3050            }
3051
3052            d.deserialize_map(Visitor)
3053        }
3054    }
3055
3056    /// The [`AWS::ApiGatewayV2::DomainName.MutualTlsAuthentication`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-mutualtlsauthentication.html) property type.
3057    #[derive(Debug, Default)]
3058    pub struct MutualTlsAuthentication {
3059        /// Property [`TruststoreUri`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-mutualtlsauthentication.html#cfn-apigatewayv2-domainname-mutualtlsauthentication-truststoreuri).
3060        ///
3061        /// Update type: _Mutable_.
3062        /// AWS CloudFormation doesn't replace the resource when you change this property.
3063        pub truststore_uri: Option<::Value<String>>,
3064        /// Property [`TruststoreVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-mutualtlsauthentication.html#cfn-apigatewayv2-domainname-mutualtlsauthentication-truststoreversion).
3065        ///
3066        /// Update type: _Mutable_.
3067        /// AWS CloudFormation doesn't replace the resource when you change this property.
3068        pub truststore_version: Option<::Value<String>>,
3069    }
3070
3071    impl ::codec::SerializeValue for MutualTlsAuthentication {
3072        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3073            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3074            if let Some(ref truststore_uri) = self.truststore_uri {
3075                ::serde::ser::SerializeMap::serialize_entry(&mut map, "TruststoreUri", truststore_uri)?;
3076            }
3077            if let Some(ref truststore_version) = self.truststore_version {
3078                ::serde::ser::SerializeMap::serialize_entry(&mut map, "TruststoreVersion", truststore_version)?;
3079            }
3080            ::serde::ser::SerializeMap::end(map)
3081        }
3082    }
3083
3084    impl ::codec::DeserializeValue for MutualTlsAuthentication {
3085        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<MutualTlsAuthentication, D::Error> {
3086            struct Visitor;
3087
3088            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3089                type Value = MutualTlsAuthentication;
3090
3091                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3092                    write!(f, "a struct of type MutualTlsAuthentication")
3093                }
3094
3095                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3096                    let mut truststore_uri: Option<::Value<String>> = None;
3097                    let mut truststore_version: Option<::Value<String>> = None;
3098
3099                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3100                        match __cfn_key.as_ref() {
3101                            "TruststoreUri" => {
3102                                truststore_uri = ::serde::de::MapAccess::next_value(&mut map)?;
3103                            }
3104                            "TruststoreVersion" => {
3105                                truststore_version = ::serde::de::MapAccess::next_value(&mut map)?;
3106                            }
3107                            _ => {}
3108                        }
3109                    }
3110
3111                    Ok(MutualTlsAuthentication {
3112                        truststore_uri: truststore_uri,
3113                        truststore_version: truststore_version,
3114                    })
3115                }
3116            }
3117
3118            d.deserialize_map(Visitor)
3119        }
3120    }
3121}
3122
3123pub mod integration {
3124    //! Property types for the `Integration` resource.
3125
3126    /// The [`AWS::ApiGatewayV2::Integration.ResponseParameter`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html) property type.
3127    #[derive(Debug, Default)]
3128    pub struct ResponseParameter {
3129        /// Property [`Destination`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html#cfn-apigatewayv2-integration-responseparameter-destination).
3130        ///
3131        /// Update type: _Mutable_.
3132        /// AWS CloudFormation doesn't replace the resource when you change this property.
3133        pub destination: ::Value<String>,
3134        /// Property [`Source`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html#cfn-apigatewayv2-integration-responseparameter-source).
3135        ///
3136        /// Update type: _Mutable_.
3137        /// AWS CloudFormation doesn't replace the resource when you change this property.
3138        pub source: ::Value<String>,
3139    }
3140
3141    impl ::codec::SerializeValue for ResponseParameter {
3142        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3143            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3144            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Destination", &self.destination)?;
3145            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Source", &self.source)?;
3146            ::serde::ser::SerializeMap::end(map)
3147        }
3148    }
3149
3150    impl ::codec::DeserializeValue for ResponseParameter {
3151        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<ResponseParameter, D::Error> {
3152            struct Visitor;
3153
3154            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3155                type Value = ResponseParameter;
3156
3157                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3158                    write!(f, "a struct of type ResponseParameter")
3159                }
3160
3161                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3162                    let mut destination: Option<::Value<String>> = None;
3163                    let mut source: Option<::Value<String>> = None;
3164
3165                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3166                        match __cfn_key.as_ref() {
3167                            "Destination" => {
3168                                destination = ::serde::de::MapAccess::next_value(&mut map)?;
3169                            }
3170                            "Source" => {
3171                                source = ::serde::de::MapAccess::next_value(&mut map)?;
3172                            }
3173                            _ => {}
3174                        }
3175                    }
3176
3177                    Ok(ResponseParameter {
3178                        destination: destination.ok_or(::serde::de::Error::missing_field("Destination"))?,
3179                        source: source.ok_or(::serde::de::Error::missing_field("Source"))?,
3180                    })
3181                }
3182            }
3183
3184            d.deserialize_map(Visitor)
3185        }
3186    }
3187
3188    /// The [`AWS::ApiGatewayV2::Integration.ResponseParameterList`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html) property type.
3189    #[derive(Debug, Default)]
3190    pub struct ResponseParameterList {
3191        /// Property [`ResponseParameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html#cfn-apigatewayv2-integration-responseparameterlist-responseparameters).
3192        ///
3193        /// Update type: _Mutable_.
3194        /// AWS CloudFormation doesn't replace the resource when you change this property.
3195        pub response_parameters: Option<::ValueList<ResponseParameter>>,
3196    }
3197
3198    impl ::codec::SerializeValue for ResponseParameterList {
3199        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3200            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3201            if let Some(ref response_parameters) = self.response_parameters {
3202                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ResponseParameters", response_parameters)?;
3203            }
3204            ::serde::ser::SerializeMap::end(map)
3205        }
3206    }
3207
3208    impl ::codec::DeserializeValue for ResponseParameterList {
3209        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<ResponseParameterList, D::Error> {
3210            struct Visitor;
3211
3212            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3213                type Value = ResponseParameterList;
3214
3215                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3216                    write!(f, "a struct of type ResponseParameterList")
3217                }
3218
3219                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3220                    let mut response_parameters: Option<::ValueList<ResponseParameter>> = None;
3221
3222                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3223                        match __cfn_key.as_ref() {
3224                            "ResponseParameters" => {
3225                                response_parameters = ::serde::de::MapAccess::next_value(&mut map)?;
3226                            }
3227                            _ => {}
3228                        }
3229                    }
3230
3231                    Ok(ResponseParameterList {
3232                        response_parameters: response_parameters,
3233                    })
3234                }
3235            }
3236
3237            d.deserialize_map(Visitor)
3238        }
3239    }
3240
3241    /// The [`AWS::ApiGatewayV2::Integration.TlsConfig`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-tlsconfig.html) property type.
3242    #[derive(Debug, Default)]
3243    pub struct TlsConfig {
3244        /// Property [`ServerNameToVerify`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-tlsconfig.html#cfn-apigatewayv2-integration-tlsconfig-servernametoverify).
3245        ///
3246        /// Update type: _Mutable_.
3247        /// AWS CloudFormation doesn't replace the resource when you change this property.
3248        pub server_name_to_verify: Option<::Value<String>>,
3249    }
3250
3251    impl ::codec::SerializeValue for TlsConfig {
3252        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3253            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3254            if let Some(ref server_name_to_verify) = self.server_name_to_verify {
3255                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ServerNameToVerify", server_name_to_verify)?;
3256            }
3257            ::serde::ser::SerializeMap::end(map)
3258        }
3259    }
3260
3261    impl ::codec::DeserializeValue for TlsConfig {
3262        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<TlsConfig, D::Error> {
3263            struct Visitor;
3264
3265            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3266                type Value = TlsConfig;
3267
3268                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3269                    write!(f, "a struct of type TlsConfig")
3270                }
3271
3272                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3273                    let mut server_name_to_verify: Option<::Value<String>> = None;
3274
3275                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3276                        match __cfn_key.as_ref() {
3277                            "ServerNameToVerify" => {
3278                                server_name_to_verify = ::serde::de::MapAccess::next_value(&mut map)?;
3279                            }
3280                            _ => {}
3281                        }
3282                    }
3283
3284                    Ok(TlsConfig {
3285                        server_name_to_verify: server_name_to_verify,
3286                    })
3287                }
3288            }
3289
3290            d.deserialize_map(Visitor)
3291        }
3292    }
3293}
3294
3295pub mod route {
3296    //! Property types for the `Route` resource.
3297
3298    /// The [`AWS::ApiGatewayV2::Route.ParameterConstraints`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-route-parameterconstraints.html) property type.
3299    #[derive(Debug, Default)]
3300    pub struct ParameterConstraints {
3301        /// Property [`Required`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-route-parameterconstraints.html#cfn-apigatewayv2-route-parameterconstraints-required).
3302        ///
3303        /// Update type: _Mutable_.
3304        /// AWS CloudFormation doesn't replace the resource when you change this property.
3305        pub required: ::Value<bool>,
3306    }
3307
3308    impl ::codec::SerializeValue for ParameterConstraints {
3309        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3310            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3311            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Required", &self.required)?;
3312            ::serde::ser::SerializeMap::end(map)
3313        }
3314    }
3315
3316    impl ::codec::DeserializeValue for ParameterConstraints {
3317        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<ParameterConstraints, D::Error> {
3318            struct Visitor;
3319
3320            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3321                type Value = ParameterConstraints;
3322
3323                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3324                    write!(f, "a struct of type ParameterConstraints")
3325                }
3326
3327                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3328                    let mut required: Option<::Value<bool>> = None;
3329
3330                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3331                        match __cfn_key.as_ref() {
3332                            "Required" => {
3333                                required = ::serde::de::MapAccess::next_value(&mut map)?;
3334                            }
3335                            _ => {}
3336                        }
3337                    }
3338
3339                    Ok(ParameterConstraints {
3340                        required: required.ok_or(::serde::de::Error::missing_field("Required"))?,
3341                    })
3342                }
3343            }
3344
3345            d.deserialize_map(Visitor)
3346        }
3347    }
3348}
3349
3350pub mod route_response {
3351    //! Property types for the `RouteResponse` resource.
3352
3353    /// The [`AWS::ApiGatewayV2::RouteResponse.ParameterConstraints`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-routeresponse-parameterconstraints.html) property type.
3354    #[derive(Debug, Default)]
3355    pub struct ParameterConstraints {
3356        /// Property [`Required`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-routeresponse-parameterconstraints.html#cfn-apigatewayv2-routeresponse-parameterconstraints-required).
3357        ///
3358        /// Update type: _Mutable_.
3359        /// AWS CloudFormation doesn't replace the resource when you change this property.
3360        pub required: ::Value<bool>,
3361    }
3362
3363    impl ::codec::SerializeValue for ParameterConstraints {
3364        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3365            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3366            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Required", &self.required)?;
3367            ::serde::ser::SerializeMap::end(map)
3368        }
3369    }
3370
3371    impl ::codec::DeserializeValue for ParameterConstraints {
3372        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<ParameterConstraints, D::Error> {
3373            struct Visitor;
3374
3375            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3376                type Value = ParameterConstraints;
3377
3378                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3379                    write!(f, "a struct of type ParameterConstraints")
3380                }
3381
3382                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3383                    let mut required: Option<::Value<bool>> = None;
3384
3385                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3386                        match __cfn_key.as_ref() {
3387                            "Required" => {
3388                                required = ::serde::de::MapAccess::next_value(&mut map)?;
3389                            }
3390                            _ => {}
3391                        }
3392                    }
3393
3394                    Ok(ParameterConstraints {
3395                        required: required.ok_or(::serde::de::Error::missing_field("Required"))?,
3396                    })
3397                }
3398            }
3399
3400            d.deserialize_map(Visitor)
3401        }
3402    }
3403}
3404
3405pub mod stage {
3406    //! Property types for the `Stage` resource.
3407
3408    /// The [`AWS::ApiGatewayV2::Stage.AccessLogSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-accesslogsettings.html) property type.
3409    #[derive(Debug, Default)]
3410    pub struct AccessLogSettings {
3411        /// Property [`DestinationArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-accesslogsettings.html#cfn-apigatewayv2-stage-accesslogsettings-destinationarn).
3412        ///
3413        /// Update type: _Mutable_.
3414        /// AWS CloudFormation doesn't replace the resource when you change this property.
3415        pub destination_arn: Option<::Value<String>>,
3416        /// Property [`Format`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-accesslogsettings.html#cfn-apigatewayv2-stage-accesslogsettings-format).
3417        ///
3418        /// Update type: _Mutable_.
3419        /// AWS CloudFormation doesn't replace the resource when you change this property.
3420        pub format: Option<::Value<String>>,
3421    }
3422
3423    impl ::codec::SerializeValue for AccessLogSettings {
3424        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3425            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3426            if let Some(ref destination_arn) = self.destination_arn {
3427                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DestinationArn", destination_arn)?;
3428            }
3429            if let Some(ref format) = self.format {
3430                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Format", format)?;
3431            }
3432            ::serde::ser::SerializeMap::end(map)
3433        }
3434    }
3435
3436    impl ::codec::DeserializeValue for AccessLogSettings {
3437        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<AccessLogSettings, D::Error> {
3438            struct Visitor;
3439
3440            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3441                type Value = AccessLogSettings;
3442
3443                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3444                    write!(f, "a struct of type AccessLogSettings")
3445                }
3446
3447                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3448                    let mut destination_arn: Option<::Value<String>> = None;
3449                    let mut format: Option<::Value<String>> = None;
3450
3451                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3452                        match __cfn_key.as_ref() {
3453                            "DestinationArn" => {
3454                                destination_arn = ::serde::de::MapAccess::next_value(&mut map)?;
3455                            }
3456                            "Format" => {
3457                                format = ::serde::de::MapAccess::next_value(&mut map)?;
3458                            }
3459                            _ => {}
3460                        }
3461                    }
3462
3463                    Ok(AccessLogSettings {
3464                        destination_arn: destination_arn,
3465                        format: format,
3466                    })
3467                }
3468            }
3469
3470            d.deserialize_map(Visitor)
3471        }
3472    }
3473
3474    /// The [`AWS::ApiGatewayV2::Stage.RouteSettings`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html) property type.
3475    #[derive(Debug, Default)]
3476    pub struct RouteSettings {
3477        /// Property [`DataTraceEnabled`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-datatraceenabled).
3478        ///
3479        /// Update type: _Mutable_.
3480        /// AWS CloudFormation doesn't replace the resource when you change this property.
3481        pub data_trace_enabled: Option<::Value<bool>>,
3482        /// Property [`DetailedMetricsEnabled`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-detailedmetricsenabled).
3483        ///
3484        /// Update type: _Mutable_.
3485        /// AWS CloudFormation doesn't replace the resource when you change this property.
3486        pub detailed_metrics_enabled: Option<::Value<bool>>,
3487        /// Property [`LoggingLevel`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-logginglevel).
3488        ///
3489        /// Update type: _Mutable_.
3490        /// AWS CloudFormation doesn't replace the resource when you change this property.
3491        pub logging_level: Option<::Value<String>>,
3492        /// Property [`ThrottlingBurstLimit`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-throttlingburstlimit).
3493        ///
3494        /// Update type: _Mutable_.
3495        /// AWS CloudFormation doesn't replace the resource when you change this property.
3496        pub throttling_burst_limit: Option<::Value<u32>>,
3497        /// Property [`ThrottlingRateLimit`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-throttlingratelimit).
3498        ///
3499        /// Update type: _Mutable_.
3500        /// AWS CloudFormation doesn't replace the resource when you change this property.
3501        pub throttling_rate_limit: Option<::Value<f64>>,
3502    }
3503
3504    impl ::codec::SerializeValue for RouteSettings {
3505        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
3506            let mut map = ::serde::Serializer::serialize_map(s, None)?;
3507            if let Some(ref data_trace_enabled) = self.data_trace_enabled {
3508                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DataTraceEnabled", data_trace_enabled)?;
3509            }
3510            if let Some(ref detailed_metrics_enabled) = self.detailed_metrics_enabled {
3511                ::serde::ser::SerializeMap::serialize_entry(&mut map, "DetailedMetricsEnabled", detailed_metrics_enabled)?;
3512            }
3513            if let Some(ref logging_level) = self.logging_level {
3514                ::serde::ser::SerializeMap::serialize_entry(&mut map, "LoggingLevel", logging_level)?;
3515            }
3516            if let Some(ref throttling_burst_limit) = self.throttling_burst_limit {
3517                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ThrottlingBurstLimit", throttling_burst_limit)?;
3518            }
3519            if let Some(ref throttling_rate_limit) = self.throttling_rate_limit {
3520                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ThrottlingRateLimit", throttling_rate_limit)?;
3521            }
3522            ::serde::ser::SerializeMap::end(map)
3523        }
3524    }
3525
3526    impl ::codec::DeserializeValue for RouteSettings {
3527        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<RouteSettings, D::Error> {
3528            struct Visitor;
3529
3530            impl<'de> ::serde::de::Visitor<'de> for Visitor {
3531                type Value = RouteSettings;
3532
3533                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
3534                    write!(f, "a struct of type RouteSettings")
3535                }
3536
3537                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
3538                    let mut data_trace_enabled: Option<::Value<bool>> = None;
3539                    let mut detailed_metrics_enabled: Option<::Value<bool>> = None;
3540                    let mut logging_level: Option<::Value<String>> = None;
3541                    let mut throttling_burst_limit: Option<::Value<u32>> = None;
3542                    let mut throttling_rate_limit: Option<::Value<f64>> = None;
3543
3544                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
3545                        match __cfn_key.as_ref() {
3546                            "DataTraceEnabled" => {
3547                                data_trace_enabled = ::serde::de::MapAccess::next_value(&mut map)?;
3548                            }
3549                            "DetailedMetricsEnabled" => {
3550                                detailed_metrics_enabled = ::serde::de::MapAccess::next_value(&mut map)?;
3551                            }
3552                            "LoggingLevel" => {
3553                                logging_level = ::serde::de::MapAccess::next_value(&mut map)?;
3554                            }
3555                            "ThrottlingBurstLimit" => {
3556                                throttling_burst_limit = ::serde::de::MapAccess::next_value(&mut map)?;
3557                            }
3558                            "ThrottlingRateLimit" => {
3559                                throttling_rate_limit = ::serde::de::MapAccess::next_value(&mut map)?;
3560                            }
3561                            _ => {}
3562                        }
3563                    }
3564
3565                    Ok(RouteSettings {
3566                        data_trace_enabled: data_trace_enabled,
3567                        detailed_metrics_enabled: detailed_metrics_enabled,
3568                        logging_level: logging_level,
3569                        throttling_burst_limit: throttling_burst_limit,
3570                        throttling_rate_limit: throttling_rate_limit,
3571                    })
3572                }
3573            }
3574
3575            d.deserialize_map(Visitor)
3576        }
3577    }
3578}