cfn/aws/
cloudformation.rs

1//! Types for the `CloudFormation` service.
2
3/// The [`AWS::CloudFormation::CustomResource`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html) resource type.
4#[derive(Debug, Default)]
5pub struct CustomResource {
6    properties: CustomResourceProperties
7}
8
9/// Properties for the `CustomResource` resource.
10#[derive(Debug, Default)]
11pub struct CustomResourceProperties {
12    /// Property [`ServiceToken`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html#cfn-customresource-servicetoken).
13    ///
14    /// Update type: _Immutable_.
15    /// AWS CloudFormation replaces the resource when you change this property.
16    pub service_token: ::Value<String>,
17}
18
19impl ::serde::Serialize for CustomResourceProperties {
20    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
21        let mut map = ::serde::Serializer::serialize_map(s, None)?;
22        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ServiceToken", &self.service_token)?;
23        ::serde::ser::SerializeMap::end(map)
24    }
25}
26
27impl<'de> ::serde::Deserialize<'de> for CustomResourceProperties {
28    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<CustomResourceProperties, D::Error> {
29        struct Visitor;
30
31        impl<'de> ::serde::de::Visitor<'de> for Visitor {
32            type Value = CustomResourceProperties;
33
34            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
35                write!(f, "a struct of type CustomResourceProperties")
36            }
37
38            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
39                let mut service_token: Option<::Value<String>> = None;
40
41                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
42                    match __cfn_key.as_ref() {
43                        "ServiceToken" => {
44                            service_token = ::serde::de::MapAccess::next_value(&mut map)?;
45                        }
46                        _ => {}
47                    }
48                }
49
50                Ok(CustomResourceProperties {
51                    service_token: service_token.ok_or(::serde::de::Error::missing_field("ServiceToken"))?,
52                })
53            }
54        }
55
56        d.deserialize_map(Visitor)
57    }
58}
59
60impl ::Resource for CustomResource {
61    type Properties = CustomResourceProperties;
62    const TYPE: &'static str = "AWS::CloudFormation::CustomResource";
63    fn properties(&self) -> &CustomResourceProperties {
64        &self.properties
65    }
66    fn properties_mut(&mut self) -> &mut CustomResourceProperties {
67        &mut self.properties
68    }
69}
70
71impl ::private::Sealed for CustomResource {}
72
73impl From<CustomResourceProperties> for CustomResource {
74    fn from(properties: CustomResourceProperties) -> CustomResource {
75        CustomResource { properties }
76    }
77}
78
79/// The [`AWS::CloudFormation::Macro`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-macro.html) resource type.
80#[derive(Debug, Default)]
81pub struct Macro {
82    properties: MacroProperties
83}
84
85/// Properties for the `Macro` resource.
86#[derive(Debug, Default)]
87pub struct MacroProperties {
88    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-macro.html#cfn-cloudformation-macro-description).
89    ///
90    /// Update type: _Mutable_.
91    /// AWS CloudFormation doesn't replace the resource when you change this property.
92    pub description: Option<::Value<String>>,
93    /// Property [`FunctionName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-macro.html#cfn-cloudformation-macro-functionname).
94    ///
95    /// Update type: _Mutable_.
96    /// AWS CloudFormation doesn't replace the resource when you change this property.
97    pub function_name: ::Value<String>,
98    /// Property [`LogGroupName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-macro.html#cfn-cloudformation-macro-loggroupname).
99    ///
100    /// Update type: _Mutable_.
101    /// AWS CloudFormation doesn't replace the resource when you change this property.
102    pub log_group_name: Option<::Value<String>>,
103    /// Property [`LogRoleARN`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-macro.html#cfn-cloudformation-macro-logrolearn).
104    ///
105    /// Update type: _Mutable_.
106    /// AWS CloudFormation doesn't replace the resource when you change this property.
107    pub log_role_arn: Option<::Value<String>>,
108    /// Property [`Name`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-macro.html#cfn-cloudformation-macro-name).
109    ///
110    /// Update type: _Immutable_.
111    /// AWS CloudFormation replaces the resource when you change this property.
112    pub name: ::Value<String>,
113}
114
115impl ::serde::Serialize for MacroProperties {
116    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
117        let mut map = ::serde::Serializer::serialize_map(s, None)?;
118        if let Some(ref description) = self.description {
119            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
120        }
121        ::serde::ser::SerializeMap::serialize_entry(&mut map, "FunctionName", &self.function_name)?;
122        if let Some(ref log_group_name) = self.log_group_name {
123            ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogGroupName", log_group_name)?;
124        }
125        if let Some(ref log_role_arn) = self.log_role_arn {
126            ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogRoleARN", log_role_arn)?;
127        }
128        ::serde::ser::SerializeMap::serialize_entry(&mut map, "Name", &self.name)?;
129        ::serde::ser::SerializeMap::end(map)
130    }
131}
132
133impl<'de> ::serde::Deserialize<'de> for MacroProperties {
134    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<MacroProperties, D::Error> {
135        struct Visitor;
136
137        impl<'de> ::serde::de::Visitor<'de> for Visitor {
138            type Value = MacroProperties;
139
140            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
141                write!(f, "a struct of type MacroProperties")
142            }
143
144            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
145                let mut description: Option<::Value<String>> = None;
146                let mut function_name: Option<::Value<String>> = None;
147                let mut log_group_name: Option<::Value<String>> = None;
148                let mut log_role_arn: Option<::Value<String>> = None;
149                let mut name: Option<::Value<String>> = None;
150
151                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
152                    match __cfn_key.as_ref() {
153                        "Description" => {
154                            description = ::serde::de::MapAccess::next_value(&mut map)?;
155                        }
156                        "FunctionName" => {
157                            function_name = ::serde::de::MapAccess::next_value(&mut map)?;
158                        }
159                        "LogGroupName" => {
160                            log_group_name = ::serde::de::MapAccess::next_value(&mut map)?;
161                        }
162                        "LogRoleARN" => {
163                            log_role_arn = ::serde::de::MapAccess::next_value(&mut map)?;
164                        }
165                        "Name" => {
166                            name = ::serde::de::MapAccess::next_value(&mut map)?;
167                        }
168                        _ => {}
169                    }
170                }
171
172                Ok(MacroProperties {
173                    description: description,
174                    function_name: function_name.ok_or(::serde::de::Error::missing_field("FunctionName"))?,
175                    log_group_name: log_group_name,
176                    log_role_arn: log_role_arn,
177                    name: name.ok_or(::serde::de::Error::missing_field("Name"))?,
178                })
179            }
180        }
181
182        d.deserialize_map(Visitor)
183    }
184}
185
186impl ::Resource for Macro {
187    type Properties = MacroProperties;
188    const TYPE: &'static str = "AWS::CloudFormation::Macro";
189    fn properties(&self) -> &MacroProperties {
190        &self.properties
191    }
192    fn properties_mut(&mut self) -> &mut MacroProperties {
193        &mut self.properties
194    }
195}
196
197impl ::private::Sealed for Macro {}
198
199impl From<MacroProperties> for Macro {
200    fn from(properties: MacroProperties) -> Macro {
201        Macro { properties }
202    }
203}
204
205/// The [`AWS::CloudFormation::ModuleDefaultVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduledefaultversion.html) resource type.
206#[derive(Debug, Default)]
207pub struct ModuleDefaultVersion {
208    properties: ModuleDefaultVersionProperties
209}
210
211/// Properties for the `ModuleDefaultVersion` resource.
212#[derive(Debug, Default)]
213pub struct ModuleDefaultVersionProperties {
214    /// Property [`Arn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduledefaultversion.html#cfn-cloudformation-moduledefaultversion-arn).
215    ///
216    /// Update type: _Immutable_.
217    /// AWS CloudFormation replaces the resource when you change this property.
218    pub arn: Option<::Value<String>>,
219    /// Property [`ModuleName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduledefaultversion.html#cfn-cloudformation-moduledefaultversion-modulename).
220    ///
221    /// Update type: _Immutable_.
222    /// AWS CloudFormation replaces the resource when you change this property.
223    pub module_name: Option<::Value<String>>,
224    /// Property [`VersionId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduledefaultversion.html#cfn-cloudformation-moduledefaultversion-versionid).
225    ///
226    /// Update type: _Immutable_.
227    /// AWS CloudFormation replaces the resource when you change this property.
228    pub version_id: Option<::Value<String>>,
229}
230
231impl ::serde::Serialize for ModuleDefaultVersionProperties {
232    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
233        let mut map = ::serde::Serializer::serialize_map(s, None)?;
234        if let Some(ref arn) = self.arn {
235            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Arn", arn)?;
236        }
237        if let Some(ref module_name) = self.module_name {
238            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ModuleName", module_name)?;
239        }
240        if let Some(ref version_id) = self.version_id {
241            ::serde::ser::SerializeMap::serialize_entry(&mut map, "VersionId", version_id)?;
242        }
243        ::serde::ser::SerializeMap::end(map)
244    }
245}
246
247impl<'de> ::serde::Deserialize<'de> for ModuleDefaultVersionProperties {
248    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ModuleDefaultVersionProperties, D::Error> {
249        struct Visitor;
250
251        impl<'de> ::serde::de::Visitor<'de> for Visitor {
252            type Value = ModuleDefaultVersionProperties;
253
254            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
255                write!(f, "a struct of type ModuleDefaultVersionProperties")
256            }
257
258            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
259                let mut arn: Option<::Value<String>> = None;
260                let mut module_name: Option<::Value<String>> = None;
261                let mut version_id: Option<::Value<String>> = None;
262
263                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
264                    match __cfn_key.as_ref() {
265                        "Arn" => {
266                            arn = ::serde::de::MapAccess::next_value(&mut map)?;
267                        }
268                        "ModuleName" => {
269                            module_name = ::serde::de::MapAccess::next_value(&mut map)?;
270                        }
271                        "VersionId" => {
272                            version_id = ::serde::de::MapAccess::next_value(&mut map)?;
273                        }
274                        _ => {}
275                    }
276                }
277
278                Ok(ModuleDefaultVersionProperties {
279                    arn: arn,
280                    module_name: module_name,
281                    version_id: version_id,
282                })
283            }
284        }
285
286        d.deserialize_map(Visitor)
287    }
288}
289
290impl ::Resource for ModuleDefaultVersion {
291    type Properties = ModuleDefaultVersionProperties;
292    const TYPE: &'static str = "AWS::CloudFormation::ModuleDefaultVersion";
293    fn properties(&self) -> &ModuleDefaultVersionProperties {
294        &self.properties
295    }
296    fn properties_mut(&mut self) -> &mut ModuleDefaultVersionProperties {
297        &mut self.properties
298    }
299}
300
301impl ::private::Sealed for ModuleDefaultVersion {}
302
303impl From<ModuleDefaultVersionProperties> for ModuleDefaultVersion {
304    fn from(properties: ModuleDefaultVersionProperties) -> ModuleDefaultVersion {
305        ModuleDefaultVersion { properties }
306    }
307}
308
309/// The [`AWS::CloudFormation::ModuleVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduleversion.html) resource type.
310#[derive(Debug, Default)]
311pub struct ModuleVersion {
312    properties: ModuleVersionProperties
313}
314
315/// Properties for the `ModuleVersion` resource.
316#[derive(Debug, Default)]
317pub struct ModuleVersionProperties {
318    /// Property [`ModuleName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduleversion.html#cfn-cloudformation-moduleversion-modulename).
319    ///
320    /// Update type: _Immutable_.
321    /// AWS CloudFormation replaces the resource when you change this property.
322    pub module_name: ::Value<String>,
323    /// Property [`ModulePackage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduleversion.html#cfn-cloudformation-moduleversion-modulepackage).
324    ///
325    /// Update type: _Immutable_.
326    /// AWS CloudFormation replaces the resource when you change this property.
327    pub module_package: ::Value<String>,
328}
329
330impl ::serde::Serialize for ModuleVersionProperties {
331    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
332        let mut map = ::serde::Serializer::serialize_map(s, None)?;
333        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ModuleName", &self.module_name)?;
334        ::serde::ser::SerializeMap::serialize_entry(&mut map, "ModulePackage", &self.module_package)?;
335        ::serde::ser::SerializeMap::end(map)
336    }
337}
338
339impl<'de> ::serde::Deserialize<'de> for ModuleVersionProperties {
340    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ModuleVersionProperties, D::Error> {
341        struct Visitor;
342
343        impl<'de> ::serde::de::Visitor<'de> for Visitor {
344            type Value = ModuleVersionProperties;
345
346            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
347                write!(f, "a struct of type ModuleVersionProperties")
348            }
349
350            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
351                let mut module_name: Option<::Value<String>> = None;
352                let mut module_package: Option<::Value<String>> = None;
353
354                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
355                    match __cfn_key.as_ref() {
356                        "ModuleName" => {
357                            module_name = ::serde::de::MapAccess::next_value(&mut map)?;
358                        }
359                        "ModulePackage" => {
360                            module_package = ::serde::de::MapAccess::next_value(&mut map)?;
361                        }
362                        _ => {}
363                    }
364                }
365
366                Ok(ModuleVersionProperties {
367                    module_name: module_name.ok_or(::serde::de::Error::missing_field("ModuleName"))?,
368                    module_package: module_package.ok_or(::serde::de::Error::missing_field("ModulePackage"))?,
369                })
370            }
371        }
372
373        d.deserialize_map(Visitor)
374    }
375}
376
377impl ::Resource for ModuleVersion {
378    type Properties = ModuleVersionProperties;
379    const TYPE: &'static str = "AWS::CloudFormation::ModuleVersion";
380    fn properties(&self) -> &ModuleVersionProperties {
381        &self.properties
382    }
383    fn properties_mut(&mut self) -> &mut ModuleVersionProperties {
384        &mut self.properties
385    }
386}
387
388impl ::private::Sealed for ModuleVersion {}
389
390impl From<ModuleVersionProperties> for ModuleVersion {
391    fn from(properties: ModuleVersionProperties) -> ModuleVersion {
392        ModuleVersion { properties }
393    }
394}
395
396/// The [`AWS::CloudFormation::PublicTypeVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publictypeversion.html) resource type.
397#[derive(Debug, Default)]
398pub struct PublicTypeVersion {
399    properties: PublicTypeVersionProperties
400}
401
402/// Properties for the `PublicTypeVersion` resource.
403#[derive(Debug, Default)]
404pub struct PublicTypeVersionProperties {
405    /// Property [`Arn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publictypeversion.html#cfn-cloudformation-publictypeversion-arn).
406    ///
407    /// Update type: _Immutable_.
408    /// AWS CloudFormation replaces the resource when you change this property.
409    pub arn: Option<::Value<String>>,
410    /// Property [`LogDeliveryBucket`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publictypeversion.html#cfn-cloudformation-publictypeversion-logdeliverybucket).
411    ///
412    /// Update type: _Immutable_.
413    /// AWS CloudFormation replaces the resource when you change this property.
414    pub log_delivery_bucket: Option<::Value<String>>,
415    /// Property [`PublicVersionNumber`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publictypeversion.html#cfn-cloudformation-publictypeversion-publicversionnumber).
416    ///
417    /// Update type: _Immutable_.
418    /// AWS CloudFormation replaces the resource when you change this property.
419    pub public_version_number: Option<::Value<String>>,
420    /// Property [`Type`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publictypeversion.html#cfn-cloudformation-publictypeversion-type).
421    ///
422    /// Update type: _Immutable_.
423    /// AWS CloudFormation replaces the resource when you change this property.
424    pub r#type: Option<::Value<String>>,
425    /// Property [`TypeName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publictypeversion.html#cfn-cloudformation-publictypeversion-typename).
426    ///
427    /// Update type: _Immutable_.
428    /// AWS CloudFormation replaces the resource when you change this property.
429    pub type_name: Option<::Value<String>>,
430}
431
432impl ::serde::Serialize for PublicTypeVersionProperties {
433    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
434        let mut map = ::serde::Serializer::serialize_map(s, None)?;
435        if let Some(ref arn) = self.arn {
436            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Arn", arn)?;
437        }
438        if let Some(ref log_delivery_bucket) = self.log_delivery_bucket {
439            ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogDeliveryBucket", log_delivery_bucket)?;
440        }
441        if let Some(ref public_version_number) = self.public_version_number {
442            ::serde::ser::SerializeMap::serialize_entry(&mut map, "PublicVersionNumber", public_version_number)?;
443        }
444        if let Some(ref r#type) = self.r#type {
445            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Type", r#type)?;
446        }
447        if let Some(ref type_name) = self.type_name {
448            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TypeName", type_name)?;
449        }
450        ::serde::ser::SerializeMap::end(map)
451    }
452}
453
454impl<'de> ::serde::Deserialize<'de> for PublicTypeVersionProperties {
455    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<PublicTypeVersionProperties, D::Error> {
456        struct Visitor;
457
458        impl<'de> ::serde::de::Visitor<'de> for Visitor {
459            type Value = PublicTypeVersionProperties;
460
461            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
462                write!(f, "a struct of type PublicTypeVersionProperties")
463            }
464
465            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
466                let mut arn: Option<::Value<String>> = None;
467                let mut log_delivery_bucket: Option<::Value<String>> = None;
468                let mut public_version_number: Option<::Value<String>> = None;
469                let mut r#type: Option<::Value<String>> = None;
470                let mut type_name: Option<::Value<String>> = None;
471
472                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
473                    match __cfn_key.as_ref() {
474                        "Arn" => {
475                            arn = ::serde::de::MapAccess::next_value(&mut map)?;
476                        }
477                        "LogDeliveryBucket" => {
478                            log_delivery_bucket = ::serde::de::MapAccess::next_value(&mut map)?;
479                        }
480                        "PublicVersionNumber" => {
481                            public_version_number = ::serde::de::MapAccess::next_value(&mut map)?;
482                        }
483                        "Type" => {
484                            r#type = ::serde::de::MapAccess::next_value(&mut map)?;
485                        }
486                        "TypeName" => {
487                            type_name = ::serde::de::MapAccess::next_value(&mut map)?;
488                        }
489                        _ => {}
490                    }
491                }
492
493                Ok(PublicTypeVersionProperties {
494                    arn: arn,
495                    log_delivery_bucket: log_delivery_bucket,
496                    public_version_number: public_version_number,
497                    r#type: r#type,
498                    type_name: type_name,
499                })
500            }
501        }
502
503        d.deserialize_map(Visitor)
504    }
505}
506
507impl ::Resource for PublicTypeVersion {
508    type Properties = PublicTypeVersionProperties;
509    const TYPE: &'static str = "AWS::CloudFormation::PublicTypeVersion";
510    fn properties(&self) -> &PublicTypeVersionProperties {
511        &self.properties
512    }
513    fn properties_mut(&mut self) -> &mut PublicTypeVersionProperties {
514        &mut self.properties
515    }
516}
517
518impl ::private::Sealed for PublicTypeVersion {}
519
520impl From<PublicTypeVersionProperties> for PublicTypeVersion {
521    fn from(properties: PublicTypeVersionProperties) -> PublicTypeVersion {
522        PublicTypeVersion { properties }
523    }
524}
525
526/// The [`AWS::CloudFormation::Publisher`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publisher.html) resource type.
527#[derive(Debug, Default)]
528pub struct Publisher {
529    properties: PublisherProperties
530}
531
532/// Properties for the `Publisher` resource.
533#[derive(Debug, Default)]
534pub struct PublisherProperties {
535    /// Property [`AcceptTermsAndConditions`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publisher.html#cfn-cloudformation-publisher-accepttermsandconditions).
536    ///
537    /// Update type: _Immutable_.
538    /// AWS CloudFormation replaces the resource when you change this property.
539    pub accept_terms_and_conditions: ::Value<bool>,
540    /// Property [`ConnectionArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-publisher.html#cfn-cloudformation-publisher-connectionarn).
541    ///
542    /// Update type: _Immutable_.
543    /// AWS CloudFormation replaces the resource when you change this property.
544    pub connection_arn: Option<::Value<String>>,
545}
546
547impl ::serde::Serialize for PublisherProperties {
548    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
549        let mut map = ::serde::Serializer::serialize_map(s, None)?;
550        ::serde::ser::SerializeMap::serialize_entry(&mut map, "AcceptTermsAndConditions", &self.accept_terms_and_conditions)?;
551        if let Some(ref connection_arn) = self.connection_arn {
552            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ConnectionArn", connection_arn)?;
553        }
554        ::serde::ser::SerializeMap::end(map)
555    }
556}
557
558impl<'de> ::serde::Deserialize<'de> for PublisherProperties {
559    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<PublisherProperties, D::Error> {
560        struct Visitor;
561
562        impl<'de> ::serde::de::Visitor<'de> for Visitor {
563            type Value = PublisherProperties;
564
565            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
566                write!(f, "a struct of type PublisherProperties")
567            }
568
569            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
570                let mut accept_terms_and_conditions: Option<::Value<bool>> = None;
571                let mut connection_arn: Option<::Value<String>> = None;
572
573                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
574                    match __cfn_key.as_ref() {
575                        "AcceptTermsAndConditions" => {
576                            accept_terms_and_conditions = ::serde::de::MapAccess::next_value(&mut map)?;
577                        }
578                        "ConnectionArn" => {
579                            connection_arn = ::serde::de::MapAccess::next_value(&mut map)?;
580                        }
581                        _ => {}
582                    }
583                }
584
585                Ok(PublisherProperties {
586                    accept_terms_and_conditions: accept_terms_and_conditions.ok_or(::serde::de::Error::missing_field("AcceptTermsAndConditions"))?,
587                    connection_arn: connection_arn,
588                })
589            }
590        }
591
592        d.deserialize_map(Visitor)
593    }
594}
595
596impl ::Resource for Publisher {
597    type Properties = PublisherProperties;
598    const TYPE: &'static str = "AWS::CloudFormation::Publisher";
599    fn properties(&self) -> &PublisherProperties {
600        &self.properties
601    }
602    fn properties_mut(&mut self) -> &mut PublisherProperties {
603        &mut self.properties
604    }
605}
606
607impl ::private::Sealed for Publisher {}
608
609impl From<PublisherProperties> for Publisher {
610    fn from(properties: PublisherProperties) -> Publisher {
611        Publisher { properties }
612    }
613}
614
615/// The [`AWS::CloudFormation::ResourceDefaultVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourcedefaultversion.html) resource type.
616#[derive(Debug, Default)]
617pub struct ResourceDefaultVersion {
618    properties: ResourceDefaultVersionProperties
619}
620
621/// Properties for the `ResourceDefaultVersion` resource.
622#[derive(Debug, Default)]
623pub struct ResourceDefaultVersionProperties {
624    /// Property [`TypeName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourcedefaultversion.html#cfn-cloudformation-resourcedefaultversion-typename).
625    ///
626    /// Update type: _Mutable_.
627    /// AWS CloudFormation doesn't replace the resource when you change this property.
628    pub type_name: Option<::Value<String>>,
629    /// Property [`TypeVersionArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourcedefaultversion.html#cfn-cloudformation-resourcedefaultversion-typeversionarn).
630    ///
631    /// Update type: _Mutable_.
632    /// AWS CloudFormation doesn't replace the resource when you change this property.
633    pub type_version_arn: Option<::Value<String>>,
634    /// Property [`VersionId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourcedefaultversion.html#cfn-cloudformation-resourcedefaultversion-versionid).
635    ///
636    /// Update type: _Mutable_.
637    /// AWS CloudFormation doesn't replace the resource when you change this property.
638    pub version_id: Option<::Value<String>>,
639}
640
641impl ::serde::Serialize for ResourceDefaultVersionProperties {
642    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
643        let mut map = ::serde::Serializer::serialize_map(s, None)?;
644        if let Some(ref type_name) = self.type_name {
645            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TypeName", type_name)?;
646        }
647        if let Some(ref type_version_arn) = self.type_version_arn {
648            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TypeVersionArn", type_version_arn)?;
649        }
650        if let Some(ref version_id) = self.version_id {
651            ::serde::ser::SerializeMap::serialize_entry(&mut map, "VersionId", version_id)?;
652        }
653        ::serde::ser::SerializeMap::end(map)
654    }
655}
656
657impl<'de> ::serde::Deserialize<'de> for ResourceDefaultVersionProperties {
658    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ResourceDefaultVersionProperties, D::Error> {
659        struct Visitor;
660
661        impl<'de> ::serde::de::Visitor<'de> for Visitor {
662            type Value = ResourceDefaultVersionProperties;
663
664            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
665                write!(f, "a struct of type ResourceDefaultVersionProperties")
666            }
667
668            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
669                let mut type_name: Option<::Value<String>> = None;
670                let mut type_version_arn: Option<::Value<String>> = None;
671                let mut version_id: Option<::Value<String>> = None;
672
673                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
674                    match __cfn_key.as_ref() {
675                        "TypeName" => {
676                            type_name = ::serde::de::MapAccess::next_value(&mut map)?;
677                        }
678                        "TypeVersionArn" => {
679                            type_version_arn = ::serde::de::MapAccess::next_value(&mut map)?;
680                        }
681                        "VersionId" => {
682                            version_id = ::serde::de::MapAccess::next_value(&mut map)?;
683                        }
684                        _ => {}
685                    }
686                }
687
688                Ok(ResourceDefaultVersionProperties {
689                    type_name: type_name,
690                    type_version_arn: type_version_arn,
691                    version_id: version_id,
692                })
693            }
694        }
695
696        d.deserialize_map(Visitor)
697    }
698}
699
700impl ::Resource for ResourceDefaultVersion {
701    type Properties = ResourceDefaultVersionProperties;
702    const TYPE: &'static str = "AWS::CloudFormation::ResourceDefaultVersion";
703    fn properties(&self) -> &ResourceDefaultVersionProperties {
704        &self.properties
705    }
706    fn properties_mut(&mut self) -> &mut ResourceDefaultVersionProperties {
707        &mut self.properties
708    }
709}
710
711impl ::private::Sealed for ResourceDefaultVersion {}
712
713impl From<ResourceDefaultVersionProperties> for ResourceDefaultVersion {
714    fn from(properties: ResourceDefaultVersionProperties) -> ResourceDefaultVersion {
715        ResourceDefaultVersion { properties }
716    }
717}
718
719/// The [`AWS::CloudFormation::ResourceVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourceversion.html) resource type.
720#[derive(Debug, Default)]
721pub struct ResourceVersion {
722    properties: ResourceVersionProperties
723}
724
725/// Properties for the `ResourceVersion` resource.
726#[derive(Debug, Default)]
727pub struct ResourceVersionProperties {
728    /// Property [`ExecutionRoleArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourceversion.html#cfn-cloudformation-resourceversion-executionrolearn).
729    ///
730    /// Update type: _Immutable_.
731    /// AWS CloudFormation replaces the resource when you change this property.
732    pub execution_role_arn: Option<::Value<String>>,
733    /// Property [`LoggingConfig`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourceversion.html#cfn-cloudformation-resourceversion-loggingconfig).
734    ///
735    /// Update type: _Immutable_.
736    /// AWS CloudFormation replaces the resource when you change this property.
737    pub logging_config: Option<::Value<self::resource_version::LoggingConfig>>,
738    /// Property [`SchemaHandlerPackage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourceversion.html#cfn-cloudformation-resourceversion-schemahandlerpackage).
739    ///
740    /// Update type: _Immutable_.
741    /// AWS CloudFormation replaces the resource when you change this property.
742    pub schema_handler_package: ::Value<String>,
743    /// Property [`TypeName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-resourceversion.html#cfn-cloudformation-resourceversion-typename).
744    ///
745    /// Update type: _Immutable_.
746    /// AWS CloudFormation replaces the resource when you change this property.
747    pub type_name: ::Value<String>,
748}
749
750impl ::serde::Serialize for ResourceVersionProperties {
751    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
752        let mut map = ::serde::Serializer::serialize_map(s, None)?;
753        if let Some(ref execution_role_arn) = self.execution_role_arn {
754            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ExecutionRoleArn", execution_role_arn)?;
755        }
756        if let Some(ref logging_config) = self.logging_config {
757            ::serde::ser::SerializeMap::serialize_entry(&mut map, "LoggingConfig", logging_config)?;
758        }
759        ::serde::ser::SerializeMap::serialize_entry(&mut map, "SchemaHandlerPackage", &self.schema_handler_package)?;
760        ::serde::ser::SerializeMap::serialize_entry(&mut map, "TypeName", &self.type_name)?;
761        ::serde::ser::SerializeMap::end(map)
762    }
763}
764
765impl<'de> ::serde::Deserialize<'de> for ResourceVersionProperties {
766    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<ResourceVersionProperties, D::Error> {
767        struct Visitor;
768
769        impl<'de> ::serde::de::Visitor<'de> for Visitor {
770            type Value = ResourceVersionProperties;
771
772            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
773                write!(f, "a struct of type ResourceVersionProperties")
774            }
775
776            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
777                let mut execution_role_arn: Option<::Value<String>> = None;
778                let mut logging_config: Option<::Value<self::resource_version::LoggingConfig>> = None;
779                let mut schema_handler_package: Option<::Value<String>> = None;
780                let mut type_name: Option<::Value<String>> = None;
781
782                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
783                    match __cfn_key.as_ref() {
784                        "ExecutionRoleArn" => {
785                            execution_role_arn = ::serde::de::MapAccess::next_value(&mut map)?;
786                        }
787                        "LoggingConfig" => {
788                            logging_config = ::serde::de::MapAccess::next_value(&mut map)?;
789                        }
790                        "SchemaHandlerPackage" => {
791                            schema_handler_package = ::serde::de::MapAccess::next_value(&mut map)?;
792                        }
793                        "TypeName" => {
794                            type_name = ::serde::de::MapAccess::next_value(&mut map)?;
795                        }
796                        _ => {}
797                    }
798                }
799
800                Ok(ResourceVersionProperties {
801                    execution_role_arn: execution_role_arn,
802                    logging_config: logging_config,
803                    schema_handler_package: schema_handler_package.ok_or(::serde::de::Error::missing_field("SchemaHandlerPackage"))?,
804                    type_name: type_name.ok_or(::serde::de::Error::missing_field("TypeName"))?,
805                })
806            }
807        }
808
809        d.deserialize_map(Visitor)
810    }
811}
812
813impl ::Resource for ResourceVersion {
814    type Properties = ResourceVersionProperties;
815    const TYPE: &'static str = "AWS::CloudFormation::ResourceVersion";
816    fn properties(&self) -> &ResourceVersionProperties {
817        &self.properties
818    }
819    fn properties_mut(&mut self) -> &mut ResourceVersionProperties {
820        &mut self.properties
821    }
822}
823
824impl ::private::Sealed for ResourceVersion {}
825
826impl From<ResourceVersionProperties> for ResourceVersion {
827    fn from(properties: ResourceVersionProperties) -> ResourceVersion {
828        ResourceVersion { properties }
829    }
830}
831
832/// The [`AWS::CloudFormation::Stack`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html) resource type.
833#[derive(Debug, Default)]
834pub struct Stack {
835    properties: StackProperties
836}
837
838/// Properties for the `Stack` resource.
839#[derive(Debug, Default)]
840pub struct StackProperties {
841    /// Property [`NotificationARNs`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-notificationarns).
842    ///
843    /// Update type: _Mutable_.
844    /// AWS CloudFormation doesn't replace the resource when you change this property.
845    pub notification_ar_ns: Option<::ValueList<String>>,
846    /// Property [`Parameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-parameters).
847    ///
848    /// Update type: _Mutable_.
849    /// AWS CloudFormation doesn't replace the resource when you change this property.
850    pub parameters: Option<::ValueMap<String>>,
851    /// Property [`Tags`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-tags).
852    ///
853    /// Update type: _Mutable_.
854    /// AWS CloudFormation doesn't replace the resource when you change this property.
855    pub tags: Option<::ValueList<::Tag>>,
856    /// Property [`TemplateURL`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-templateurl).
857    ///
858    /// Update type: _Mutable_.
859    /// AWS CloudFormation doesn't replace the resource when you change this property.
860    pub template_url: ::Value<String>,
861    /// Property [`TimeoutInMinutes`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html#cfn-cloudformation-stack-timeoutinminutes).
862    ///
863    /// Update type: _Mutable_.
864    /// AWS CloudFormation doesn't replace the resource when you change this property.
865    pub timeout_in_minutes: Option<::Value<u32>>,
866}
867
868impl ::serde::Serialize for StackProperties {
869    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
870        let mut map = ::serde::Serializer::serialize_map(s, None)?;
871        if let Some(ref notification_ar_ns) = self.notification_ar_ns {
872            ::serde::ser::SerializeMap::serialize_entry(&mut map, "NotificationARNs", notification_ar_ns)?;
873        }
874        if let Some(ref parameters) = self.parameters {
875            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Parameters", parameters)?;
876        }
877        if let Some(ref tags) = self.tags {
878            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Tags", tags)?;
879        }
880        ::serde::ser::SerializeMap::serialize_entry(&mut map, "TemplateURL", &self.template_url)?;
881        if let Some(ref timeout_in_minutes) = self.timeout_in_minutes {
882            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TimeoutInMinutes", timeout_in_minutes)?;
883        }
884        ::serde::ser::SerializeMap::end(map)
885    }
886}
887
888impl<'de> ::serde::Deserialize<'de> for StackProperties {
889    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<StackProperties, D::Error> {
890        struct Visitor;
891
892        impl<'de> ::serde::de::Visitor<'de> for Visitor {
893            type Value = StackProperties;
894
895            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
896                write!(f, "a struct of type StackProperties")
897            }
898
899            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
900                let mut notification_ar_ns: Option<::ValueList<String>> = None;
901                let mut parameters: Option<::ValueMap<String>> = None;
902                let mut tags: Option<::ValueList<::Tag>> = None;
903                let mut template_url: Option<::Value<String>> = None;
904                let mut timeout_in_minutes: Option<::Value<u32>> = None;
905
906                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
907                    match __cfn_key.as_ref() {
908                        "NotificationARNs" => {
909                            notification_ar_ns = ::serde::de::MapAccess::next_value(&mut map)?;
910                        }
911                        "Parameters" => {
912                            parameters = ::serde::de::MapAccess::next_value(&mut map)?;
913                        }
914                        "Tags" => {
915                            tags = ::serde::de::MapAccess::next_value(&mut map)?;
916                        }
917                        "TemplateURL" => {
918                            template_url = ::serde::de::MapAccess::next_value(&mut map)?;
919                        }
920                        "TimeoutInMinutes" => {
921                            timeout_in_minutes = ::serde::de::MapAccess::next_value(&mut map)?;
922                        }
923                        _ => {}
924                    }
925                }
926
927                Ok(StackProperties {
928                    notification_ar_ns: notification_ar_ns,
929                    parameters: parameters,
930                    tags: tags,
931                    template_url: template_url.ok_or(::serde::de::Error::missing_field("TemplateURL"))?,
932                    timeout_in_minutes: timeout_in_minutes,
933                })
934            }
935        }
936
937        d.deserialize_map(Visitor)
938    }
939}
940
941impl ::Resource for Stack {
942    type Properties = StackProperties;
943    const TYPE: &'static str = "AWS::CloudFormation::Stack";
944    fn properties(&self) -> &StackProperties {
945        &self.properties
946    }
947    fn properties_mut(&mut self) -> &mut StackProperties {
948        &mut self.properties
949    }
950}
951
952impl ::private::Sealed for Stack {}
953
954impl From<StackProperties> for Stack {
955    fn from(properties: StackProperties) -> Stack {
956        Stack { properties }
957    }
958}
959
960/// The [`AWS::CloudFormation::StackSet`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html) resource type.
961#[derive(Debug, Default)]
962pub struct StackSet {
963    properties: StackSetProperties
964}
965
966/// Properties for the `StackSet` resource.
967#[derive(Debug, Default)]
968pub struct StackSetProperties {
969    /// Property [`AdministrationRoleARN`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-administrationrolearn).
970    ///
971    /// Update type: _Mutable_.
972    /// AWS CloudFormation doesn't replace the resource when you change this property.
973    pub administration_role_arn: Option<::Value<String>>,
974    /// Property [`AutoDeployment`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-autodeployment).
975    ///
976    /// Update type: _Mutable_.
977    /// AWS CloudFormation doesn't replace the resource when you change this property.
978    pub auto_deployment: Option<::Value<self::stack_set::AutoDeployment>>,
979    /// Property [`CallAs`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-callas).
980    ///
981    /// Update type: _Mutable_.
982    /// AWS CloudFormation doesn't replace the resource when you change this property.
983    pub call_as: Option<::Value<String>>,
984    /// Property [`Capabilities`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-capabilities).
985    ///
986    /// Update type: _Mutable_.
987    /// AWS CloudFormation doesn't replace the resource when you change this property.
988    pub capabilities: Option<::ValueList<String>>,
989    /// Property [`Description`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-description).
990    ///
991    /// Update type: _Mutable_.
992    /// AWS CloudFormation doesn't replace the resource when you change this property.
993    pub description: Option<::Value<String>>,
994    /// Property [`ExecutionRoleName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-executionrolename).
995    ///
996    /// Update type: _Mutable_.
997    /// AWS CloudFormation doesn't replace the resource when you change this property.
998    pub execution_role_name: Option<::Value<String>>,
999    /// Property [`OperationPreferences`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-operationpreferences).
1000    ///
1001    /// Update type: _Mutable_.
1002    /// AWS CloudFormation doesn't replace the resource when you change this property.
1003    pub operation_preferences: Option<::Value<self::stack_set::OperationPreferences>>,
1004    /// Property [`Parameters`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-parameters).
1005    ///
1006    /// Update type: _Mutable_.
1007    /// AWS CloudFormation doesn't replace the resource when you change this property.
1008    pub parameters: Option<::ValueList<self::stack_set::Parameter>>,
1009    /// Property [`PermissionModel`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-permissionmodel).
1010    ///
1011    /// Update type: _Immutable_.
1012    /// AWS CloudFormation replaces the resource when you change this property.
1013    pub permission_model: ::Value<String>,
1014    /// Property [`StackInstancesGroup`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-stackinstancesgroup).
1015    ///
1016    /// Update type: _Mutable_.
1017    /// AWS CloudFormation doesn't replace the resource when you change this property.
1018    pub stack_instances_group: Option<::ValueList<self::stack_set::StackInstances>>,
1019    /// Property [`StackSetName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-stacksetname).
1020    ///
1021    /// Update type: _Immutable_.
1022    /// AWS CloudFormation replaces the resource when you change this property.
1023    pub stack_set_name: ::Value<String>,
1024    /// Property [`Tags`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-tags).
1025    ///
1026    /// Update type: _Mutable_.
1027    /// AWS CloudFormation doesn't replace the resource when you change this property.
1028    pub tags: Option<::ValueList<::Tag>>,
1029    /// Property [`TemplateBody`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-templatebody).
1030    ///
1031    /// Update type: _Mutable_.
1032    /// AWS CloudFormation doesn't replace the resource when you change this property.
1033    pub template_body: Option<::Value<String>>,
1034    /// Property [`TemplateURL`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-templateurl).
1035    ///
1036    /// Update type: _Mutable_.
1037    /// AWS CloudFormation doesn't replace the resource when you change this property.
1038    pub template_url: Option<::Value<String>>,
1039}
1040
1041impl ::serde::Serialize for StackSetProperties {
1042    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1043        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1044        if let Some(ref administration_role_arn) = self.administration_role_arn {
1045            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AdministrationRoleARN", administration_role_arn)?;
1046        }
1047        if let Some(ref auto_deployment) = self.auto_deployment {
1048            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AutoDeployment", auto_deployment)?;
1049        }
1050        if let Some(ref call_as) = self.call_as {
1051            ::serde::ser::SerializeMap::serialize_entry(&mut map, "CallAs", call_as)?;
1052        }
1053        if let Some(ref capabilities) = self.capabilities {
1054            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Capabilities", capabilities)?;
1055        }
1056        if let Some(ref description) = self.description {
1057            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Description", description)?;
1058        }
1059        if let Some(ref execution_role_name) = self.execution_role_name {
1060            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ExecutionRoleName", execution_role_name)?;
1061        }
1062        if let Some(ref operation_preferences) = self.operation_preferences {
1063            ::serde::ser::SerializeMap::serialize_entry(&mut map, "OperationPreferences", operation_preferences)?;
1064        }
1065        if let Some(ref parameters) = self.parameters {
1066            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Parameters", parameters)?;
1067        }
1068        ::serde::ser::SerializeMap::serialize_entry(&mut map, "PermissionModel", &self.permission_model)?;
1069        if let Some(ref stack_instances_group) = self.stack_instances_group {
1070            ::serde::ser::SerializeMap::serialize_entry(&mut map, "StackInstancesGroup", stack_instances_group)?;
1071        }
1072        ::serde::ser::SerializeMap::serialize_entry(&mut map, "StackSetName", &self.stack_set_name)?;
1073        if let Some(ref tags) = self.tags {
1074            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Tags", tags)?;
1075        }
1076        if let Some(ref template_body) = self.template_body {
1077            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TemplateBody", template_body)?;
1078        }
1079        if let Some(ref template_url) = self.template_url {
1080            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TemplateURL", template_url)?;
1081        }
1082        ::serde::ser::SerializeMap::end(map)
1083    }
1084}
1085
1086impl<'de> ::serde::Deserialize<'de> for StackSetProperties {
1087    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<StackSetProperties, D::Error> {
1088        struct Visitor;
1089
1090        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1091            type Value = StackSetProperties;
1092
1093            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1094                write!(f, "a struct of type StackSetProperties")
1095            }
1096
1097            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1098                let mut administration_role_arn: Option<::Value<String>> = None;
1099                let mut auto_deployment: Option<::Value<self::stack_set::AutoDeployment>> = None;
1100                let mut call_as: Option<::Value<String>> = None;
1101                let mut capabilities: Option<::ValueList<String>> = None;
1102                let mut description: Option<::Value<String>> = None;
1103                let mut execution_role_name: Option<::Value<String>> = None;
1104                let mut operation_preferences: Option<::Value<self::stack_set::OperationPreferences>> = None;
1105                let mut parameters: Option<::ValueList<self::stack_set::Parameter>> = None;
1106                let mut permission_model: Option<::Value<String>> = None;
1107                let mut stack_instances_group: Option<::ValueList<self::stack_set::StackInstances>> = None;
1108                let mut stack_set_name: Option<::Value<String>> = None;
1109                let mut tags: Option<::ValueList<::Tag>> = None;
1110                let mut template_body: Option<::Value<String>> = None;
1111                let mut template_url: Option<::Value<String>> = None;
1112
1113                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1114                    match __cfn_key.as_ref() {
1115                        "AdministrationRoleARN" => {
1116                            administration_role_arn = ::serde::de::MapAccess::next_value(&mut map)?;
1117                        }
1118                        "AutoDeployment" => {
1119                            auto_deployment = ::serde::de::MapAccess::next_value(&mut map)?;
1120                        }
1121                        "CallAs" => {
1122                            call_as = ::serde::de::MapAccess::next_value(&mut map)?;
1123                        }
1124                        "Capabilities" => {
1125                            capabilities = ::serde::de::MapAccess::next_value(&mut map)?;
1126                        }
1127                        "Description" => {
1128                            description = ::serde::de::MapAccess::next_value(&mut map)?;
1129                        }
1130                        "ExecutionRoleName" => {
1131                            execution_role_name = ::serde::de::MapAccess::next_value(&mut map)?;
1132                        }
1133                        "OperationPreferences" => {
1134                            operation_preferences = ::serde::de::MapAccess::next_value(&mut map)?;
1135                        }
1136                        "Parameters" => {
1137                            parameters = ::serde::de::MapAccess::next_value(&mut map)?;
1138                        }
1139                        "PermissionModel" => {
1140                            permission_model = ::serde::de::MapAccess::next_value(&mut map)?;
1141                        }
1142                        "StackInstancesGroup" => {
1143                            stack_instances_group = ::serde::de::MapAccess::next_value(&mut map)?;
1144                        }
1145                        "StackSetName" => {
1146                            stack_set_name = ::serde::de::MapAccess::next_value(&mut map)?;
1147                        }
1148                        "Tags" => {
1149                            tags = ::serde::de::MapAccess::next_value(&mut map)?;
1150                        }
1151                        "TemplateBody" => {
1152                            template_body = ::serde::de::MapAccess::next_value(&mut map)?;
1153                        }
1154                        "TemplateURL" => {
1155                            template_url = ::serde::de::MapAccess::next_value(&mut map)?;
1156                        }
1157                        _ => {}
1158                    }
1159                }
1160
1161                Ok(StackSetProperties {
1162                    administration_role_arn: administration_role_arn,
1163                    auto_deployment: auto_deployment,
1164                    call_as: call_as,
1165                    capabilities: capabilities,
1166                    description: description,
1167                    execution_role_name: execution_role_name,
1168                    operation_preferences: operation_preferences,
1169                    parameters: parameters,
1170                    permission_model: permission_model.ok_or(::serde::de::Error::missing_field("PermissionModel"))?,
1171                    stack_instances_group: stack_instances_group,
1172                    stack_set_name: stack_set_name.ok_or(::serde::de::Error::missing_field("StackSetName"))?,
1173                    tags: tags,
1174                    template_body: template_body,
1175                    template_url: template_url,
1176                })
1177            }
1178        }
1179
1180        d.deserialize_map(Visitor)
1181    }
1182}
1183
1184impl ::Resource for StackSet {
1185    type Properties = StackSetProperties;
1186    const TYPE: &'static str = "AWS::CloudFormation::StackSet";
1187    fn properties(&self) -> &StackSetProperties {
1188        &self.properties
1189    }
1190    fn properties_mut(&mut self) -> &mut StackSetProperties {
1191        &mut self.properties
1192    }
1193}
1194
1195impl ::private::Sealed for StackSet {}
1196
1197impl From<StackSetProperties> for StackSet {
1198    fn from(properties: StackSetProperties) -> StackSet {
1199        StackSet { properties }
1200    }
1201}
1202
1203/// The [`AWS::CloudFormation::TypeActivation`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html) resource type.
1204#[derive(Debug, Default)]
1205pub struct TypeActivation {
1206    properties: TypeActivationProperties
1207}
1208
1209/// Properties for the `TypeActivation` resource.
1210#[derive(Debug, Default)]
1211pub struct TypeActivationProperties {
1212    /// Property [`AutoUpdate`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-autoupdate).
1213    ///
1214    /// Update type: _Mutable_.
1215    /// AWS CloudFormation doesn't replace the resource when you change this property.
1216    pub auto_update: Option<::Value<bool>>,
1217    /// Property [`ExecutionRoleArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-executionrolearn).
1218    ///
1219    /// Update type: _Immutable_.
1220    /// AWS CloudFormation replaces the resource when you change this property.
1221    pub execution_role_arn: Option<::Value<String>>,
1222    /// Property [`LoggingConfig`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-loggingconfig).
1223    ///
1224    /// Update type: _Immutable_.
1225    /// AWS CloudFormation replaces the resource when you change this property.
1226    pub logging_config: Option<::Value<self::type_activation::LoggingConfig>>,
1227    /// Property [`MajorVersion`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-majorversion).
1228    ///
1229    /// Update type: _Mutable_.
1230    /// AWS CloudFormation doesn't replace the resource when you change this property.
1231    pub major_version: Option<::Value<String>>,
1232    /// Property [`PublicTypeArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-publictypearn).
1233    ///
1234    /// Update type: _Immutable_.
1235    /// AWS CloudFormation replaces the resource when you change this property.
1236    pub public_type_arn: Option<::Value<String>>,
1237    /// Property [`PublisherId`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-publisherid).
1238    ///
1239    /// Update type: _Immutable_.
1240    /// AWS CloudFormation replaces the resource when you change this property.
1241    pub publisher_id: Option<::Value<String>>,
1242    /// Property [`Type`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-type).
1243    ///
1244    /// Update type: _Immutable_.
1245    /// AWS CloudFormation replaces the resource when you change this property.
1246    pub r#type: Option<::Value<String>>,
1247    /// Property [`TypeName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-typename).
1248    ///
1249    /// Update type: _Immutable_.
1250    /// AWS CloudFormation replaces the resource when you change this property.
1251    pub type_name: Option<::Value<String>>,
1252    /// Property [`TypeNameAlias`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-typenamealias).
1253    ///
1254    /// Update type: _Immutable_.
1255    /// AWS CloudFormation replaces the resource when you change this property.
1256    pub type_name_alias: Option<::Value<String>>,
1257    /// Property [`VersionBump`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html#cfn-cloudformation-typeactivation-versionbump).
1258    ///
1259    /// Update type: _Mutable_.
1260    /// AWS CloudFormation doesn't replace the resource when you change this property.
1261    pub version_bump: Option<::Value<String>>,
1262}
1263
1264impl ::serde::Serialize for TypeActivationProperties {
1265    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1266        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1267        if let Some(ref auto_update) = self.auto_update {
1268            ::serde::ser::SerializeMap::serialize_entry(&mut map, "AutoUpdate", auto_update)?;
1269        }
1270        if let Some(ref execution_role_arn) = self.execution_role_arn {
1271            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ExecutionRoleArn", execution_role_arn)?;
1272        }
1273        if let Some(ref logging_config) = self.logging_config {
1274            ::serde::ser::SerializeMap::serialize_entry(&mut map, "LoggingConfig", logging_config)?;
1275        }
1276        if let Some(ref major_version) = self.major_version {
1277            ::serde::ser::SerializeMap::serialize_entry(&mut map, "MajorVersion", major_version)?;
1278        }
1279        if let Some(ref public_type_arn) = self.public_type_arn {
1280            ::serde::ser::SerializeMap::serialize_entry(&mut map, "PublicTypeArn", public_type_arn)?;
1281        }
1282        if let Some(ref publisher_id) = self.publisher_id {
1283            ::serde::ser::SerializeMap::serialize_entry(&mut map, "PublisherId", publisher_id)?;
1284        }
1285        if let Some(ref r#type) = self.r#type {
1286            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Type", r#type)?;
1287        }
1288        if let Some(ref type_name) = self.type_name {
1289            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TypeName", type_name)?;
1290        }
1291        if let Some(ref type_name_alias) = self.type_name_alias {
1292            ::serde::ser::SerializeMap::serialize_entry(&mut map, "TypeNameAlias", type_name_alias)?;
1293        }
1294        if let Some(ref version_bump) = self.version_bump {
1295            ::serde::ser::SerializeMap::serialize_entry(&mut map, "VersionBump", version_bump)?;
1296        }
1297        ::serde::ser::SerializeMap::end(map)
1298    }
1299}
1300
1301impl<'de> ::serde::Deserialize<'de> for TypeActivationProperties {
1302    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<TypeActivationProperties, D::Error> {
1303        struct Visitor;
1304
1305        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1306            type Value = TypeActivationProperties;
1307
1308            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1309                write!(f, "a struct of type TypeActivationProperties")
1310            }
1311
1312            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1313                let mut auto_update: Option<::Value<bool>> = None;
1314                let mut execution_role_arn: Option<::Value<String>> = None;
1315                let mut logging_config: Option<::Value<self::type_activation::LoggingConfig>> = None;
1316                let mut major_version: Option<::Value<String>> = None;
1317                let mut public_type_arn: Option<::Value<String>> = None;
1318                let mut publisher_id: Option<::Value<String>> = None;
1319                let mut r#type: Option<::Value<String>> = None;
1320                let mut type_name: Option<::Value<String>> = None;
1321                let mut type_name_alias: Option<::Value<String>> = None;
1322                let mut version_bump: Option<::Value<String>> = None;
1323
1324                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1325                    match __cfn_key.as_ref() {
1326                        "AutoUpdate" => {
1327                            auto_update = ::serde::de::MapAccess::next_value(&mut map)?;
1328                        }
1329                        "ExecutionRoleArn" => {
1330                            execution_role_arn = ::serde::de::MapAccess::next_value(&mut map)?;
1331                        }
1332                        "LoggingConfig" => {
1333                            logging_config = ::serde::de::MapAccess::next_value(&mut map)?;
1334                        }
1335                        "MajorVersion" => {
1336                            major_version = ::serde::de::MapAccess::next_value(&mut map)?;
1337                        }
1338                        "PublicTypeArn" => {
1339                            public_type_arn = ::serde::de::MapAccess::next_value(&mut map)?;
1340                        }
1341                        "PublisherId" => {
1342                            publisher_id = ::serde::de::MapAccess::next_value(&mut map)?;
1343                        }
1344                        "Type" => {
1345                            r#type = ::serde::de::MapAccess::next_value(&mut map)?;
1346                        }
1347                        "TypeName" => {
1348                            type_name = ::serde::de::MapAccess::next_value(&mut map)?;
1349                        }
1350                        "TypeNameAlias" => {
1351                            type_name_alias = ::serde::de::MapAccess::next_value(&mut map)?;
1352                        }
1353                        "VersionBump" => {
1354                            version_bump = ::serde::de::MapAccess::next_value(&mut map)?;
1355                        }
1356                        _ => {}
1357                    }
1358                }
1359
1360                Ok(TypeActivationProperties {
1361                    auto_update: auto_update,
1362                    execution_role_arn: execution_role_arn,
1363                    logging_config: logging_config,
1364                    major_version: major_version,
1365                    public_type_arn: public_type_arn,
1366                    publisher_id: publisher_id,
1367                    r#type: r#type,
1368                    type_name: type_name,
1369                    type_name_alias: type_name_alias,
1370                    version_bump: version_bump,
1371                })
1372            }
1373        }
1374
1375        d.deserialize_map(Visitor)
1376    }
1377}
1378
1379impl ::Resource for TypeActivation {
1380    type Properties = TypeActivationProperties;
1381    const TYPE: &'static str = "AWS::CloudFormation::TypeActivation";
1382    fn properties(&self) -> &TypeActivationProperties {
1383        &self.properties
1384    }
1385    fn properties_mut(&mut self) -> &mut TypeActivationProperties {
1386        &mut self.properties
1387    }
1388}
1389
1390impl ::private::Sealed for TypeActivation {}
1391
1392impl From<TypeActivationProperties> for TypeActivation {
1393    fn from(properties: TypeActivationProperties) -> TypeActivation {
1394        TypeActivation { properties }
1395    }
1396}
1397
1398/// The [`AWS::CloudFormation::WaitCondition`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html) resource type.
1399#[derive(Debug, Default)]
1400pub struct WaitCondition {
1401    properties: WaitConditionProperties
1402}
1403
1404/// Properties for the `WaitCondition` resource.
1405#[derive(Debug, Default)]
1406pub struct WaitConditionProperties {
1407    /// Property [`Count`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html#cfn-waitcondition-count).
1408    ///
1409    /// Update type: _Mutable_.
1410    /// AWS CloudFormation doesn't replace the resource when you change this property.
1411    pub count: Option<::Value<u32>>,
1412    /// Property [`Handle`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html#cfn-waitcondition-handle).
1413    ///
1414    /// Update type: _Mutable_.
1415    /// AWS CloudFormation doesn't replace the resource when you change this property.
1416    pub handle: Option<::Value<String>>,
1417    /// Property [`Timeout`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html#cfn-waitcondition-timeout).
1418    ///
1419    /// Update type: _Mutable_.
1420    /// AWS CloudFormation doesn't replace the resource when you change this property.
1421    pub timeout: Option<::Value<String>>,
1422}
1423
1424impl ::serde::Serialize for WaitConditionProperties {
1425    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1426        let mut map = ::serde::Serializer::serialize_map(s, None)?;
1427        if let Some(ref count) = self.count {
1428            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Count", count)?;
1429        }
1430        if let Some(ref handle) = self.handle {
1431            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Handle", handle)?;
1432        }
1433        if let Some(ref timeout) = self.timeout {
1434            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Timeout", timeout)?;
1435        }
1436        ::serde::ser::SerializeMap::end(map)
1437    }
1438}
1439
1440impl<'de> ::serde::Deserialize<'de> for WaitConditionProperties {
1441    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<WaitConditionProperties, D::Error> {
1442        struct Visitor;
1443
1444        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1445            type Value = WaitConditionProperties;
1446
1447            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1448                write!(f, "a struct of type WaitConditionProperties")
1449            }
1450
1451            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1452                let mut count: Option<::Value<u32>> = None;
1453                let mut handle: Option<::Value<String>> = None;
1454                let mut timeout: Option<::Value<String>> = None;
1455
1456                while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1457                    match __cfn_key.as_ref() {
1458                        "Count" => {
1459                            count = ::serde::de::MapAccess::next_value(&mut map)?;
1460                        }
1461                        "Handle" => {
1462                            handle = ::serde::de::MapAccess::next_value(&mut map)?;
1463                        }
1464                        "Timeout" => {
1465                            timeout = ::serde::de::MapAccess::next_value(&mut map)?;
1466                        }
1467                        _ => {}
1468                    }
1469                }
1470
1471                Ok(WaitConditionProperties {
1472                    count: count,
1473                    handle: handle,
1474                    timeout: timeout,
1475                })
1476            }
1477        }
1478
1479        d.deserialize_map(Visitor)
1480    }
1481}
1482
1483impl ::Resource for WaitCondition {
1484    type Properties = WaitConditionProperties;
1485    const TYPE: &'static str = "AWS::CloudFormation::WaitCondition";
1486    fn properties(&self) -> &WaitConditionProperties {
1487        &self.properties
1488    }
1489    fn properties_mut(&mut self) -> &mut WaitConditionProperties {
1490        &mut self.properties
1491    }
1492}
1493
1494impl ::private::Sealed for WaitCondition {}
1495
1496impl From<WaitConditionProperties> for WaitCondition {
1497    fn from(properties: WaitConditionProperties) -> WaitCondition {
1498        WaitCondition { properties }
1499    }
1500}
1501
1502/// The [`AWS::CloudFormation::WaitConditionHandle`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitconditionhandle.html) resource type.
1503#[derive(Debug, Default)]
1504pub struct WaitConditionHandle {
1505    properties: WaitConditionHandleProperties
1506}
1507
1508/// Properties for the `WaitConditionHandle` resource.
1509#[derive(Debug, Default)]
1510pub struct WaitConditionHandleProperties {
1511}
1512
1513impl ::serde::Serialize for WaitConditionHandleProperties {
1514    fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1515        let map = ::serde::Serializer::serialize_map(s, None)?;
1516        ::serde::ser::SerializeMap::end(map)
1517    }
1518}
1519
1520impl<'de> ::serde::Deserialize<'de> for WaitConditionHandleProperties {
1521    fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<WaitConditionHandleProperties, D::Error> {
1522        struct Visitor;
1523
1524        impl<'de> ::serde::de::Visitor<'de> for Visitor {
1525            type Value = WaitConditionHandleProperties;
1526
1527            fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1528                write!(f, "a struct of type WaitConditionHandleProperties")
1529            }
1530
1531            fn visit_map<A: ::serde::de::MapAccess<'de>>(self, _map: A) -> Result<Self::Value, A::Error> {
1532                Ok(WaitConditionHandleProperties {})
1533            }
1534        }
1535
1536        d.deserialize_map(Visitor)
1537    }
1538}
1539
1540impl ::Resource for WaitConditionHandle {
1541    type Properties = WaitConditionHandleProperties;
1542    const TYPE: &'static str = "AWS::CloudFormation::WaitConditionHandle";
1543    fn properties(&self) -> &WaitConditionHandleProperties {
1544        &self.properties
1545    }
1546    fn properties_mut(&mut self) -> &mut WaitConditionHandleProperties {
1547        &mut self.properties
1548    }
1549}
1550
1551impl ::private::Sealed for WaitConditionHandle {}
1552
1553impl From<WaitConditionHandleProperties> for WaitConditionHandle {
1554    fn from(properties: WaitConditionHandleProperties) -> WaitConditionHandle {
1555        WaitConditionHandle { properties }
1556    }
1557}
1558
1559pub mod resource_version {
1560    //! Property types for the `ResourceVersion` resource.
1561
1562    /// The [`AWS::CloudFormation::ResourceVersion.LoggingConfig`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-resourceversion-loggingconfig.html) property type.
1563    #[derive(Debug, Default)]
1564    pub struct LoggingConfig {
1565        /// Property [`LogGroupName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-resourceversion-loggingconfig.html#cfn-cloudformation-resourceversion-loggingconfig-loggroupname).
1566        ///
1567        /// Update type: _Immutable_.
1568        /// AWS CloudFormation replaces the resource when you change this property.
1569        pub log_group_name: Option<::Value<String>>,
1570        /// Property [`LogRoleArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-resourceversion-loggingconfig.html#cfn-cloudformation-resourceversion-loggingconfig-logrolearn).
1571        ///
1572        /// Update type: _Immutable_.
1573        /// AWS CloudFormation replaces the resource when you change this property.
1574        pub log_role_arn: Option<::Value<String>>,
1575    }
1576
1577    impl ::codec::SerializeValue for LoggingConfig {
1578        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1579            let mut map = ::serde::Serializer::serialize_map(s, None)?;
1580            if let Some(ref log_group_name) = self.log_group_name {
1581                ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogGroupName", log_group_name)?;
1582            }
1583            if let Some(ref log_role_arn) = self.log_role_arn {
1584                ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogRoleArn", log_role_arn)?;
1585            }
1586            ::serde::ser::SerializeMap::end(map)
1587        }
1588    }
1589
1590    impl ::codec::DeserializeValue for LoggingConfig {
1591        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<LoggingConfig, D::Error> {
1592            struct Visitor;
1593
1594            impl<'de> ::serde::de::Visitor<'de> for Visitor {
1595                type Value = LoggingConfig;
1596
1597                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1598                    write!(f, "a struct of type LoggingConfig")
1599                }
1600
1601                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1602                    let mut log_group_name: Option<::Value<String>> = None;
1603                    let mut log_role_arn: Option<::Value<String>> = None;
1604
1605                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1606                        match __cfn_key.as_ref() {
1607                            "LogGroupName" => {
1608                                log_group_name = ::serde::de::MapAccess::next_value(&mut map)?;
1609                            }
1610                            "LogRoleArn" => {
1611                                log_role_arn = ::serde::de::MapAccess::next_value(&mut map)?;
1612                            }
1613                            _ => {}
1614                        }
1615                    }
1616
1617                    Ok(LoggingConfig {
1618                        log_group_name: log_group_name,
1619                        log_role_arn: log_role_arn,
1620                    })
1621                }
1622            }
1623
1624            d.deserialize_map(Visitor)
1625        }
1626    }
1627}
1628
1629pub mod stack_set {
1630    //! Property types for the `StackSet` resource.
1631
1632    /// The [`AWS::CloudFormation::StackSet.AutoDeployment`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-autodeployment.html) property type.
1633    #[derive(Debug, Default)]
1634    pub struct AutoDeployment {
1635        /// Property [`Enabled`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-autodeployment.html#cfn-cloudformation-stackset-autodeployment-enabled).
1636        ///
1637        /// Update type: _Mutable_.
1638        /// AWS CloudFormation doesn't replace the resource when you change this property.
1639        pub enabled: Option<::Value<bool>>,
1640        /// Property [`RetainStacksOnAccountRemoval`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-autodeployment.html#cfn-cloudformation-stackset-autodeployment-retainstacksonaccountremoval).
1641        ///
1642        /// Update type: _Mutable_.
1643        /// AWS CloudFormation doesn't replace the resource when you change this property.
1644        pub retain_stacks_on_account_removal: Option<::Value<bool>>,
1645    }
1646
1647    impl ::codec::SerializeValue for AutoDeployment {
1648        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1649            let mut map = ::serde::Serializer::serialize_map(s, None)?;
1650            if let Some(ref enabled) = self.enabled {
1651                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Enabled", enabled)?;
1652            }
1653            if let Some(ref retain_stacks_on_account_removal) = self.retain_stacks_on_account_removal {
1654                ::serde::ser::SerializeMap::serialize_entry(&mut map, "RetainStacksOnAccountRemoval", retain_stacks_on_account_removal)?;
1655            }
1656            ::serde::ser::SerializeMap::end(map)
1657        }
1658    }
1659
1660    impl ::codec::DeserializeValue for AutoDeployment {
1661        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<AutoDeployment, D::Error> {
1662            struct Visitor;
1663
1664            impl<'de> ::serde::de::Visitor<'de> for Visitor {
1665                type Value = AutoDeployment;
1666
1667                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1668                    write!(f, "a struct of type AutoDeployment")
1669                }
1670
1671                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1672                    let mut enabled: Option<::Value<bool>> = None;
1673                    let mut retain_stacks_on_account_removal: Option<::Value<bool>> = None;
1674
1675                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1676                        match __cfn_key.as_ref() {
1677                            "Enabled" => {
1678                                enabled = ::serde::de::MapAccess::next_value(&mut map)?;
1679                            }
1680                            "RetainStacksOnAccountRemoval" => {
1681                                retain_stacks_on_account_removal = ::serde::de::MapAccess::next_value(&mut map)?;
1682                            }
1683                            _ => {}
1684                        }
1685                    }
1686
1687                    Ok(AutoDeployment {
1688                        enabled: enabled,
1689                        retain_stacks_on_account_removal: retain_stacks_on_account_removal,
1690                    })
1691                }
1692            }
1693
1694            d.deserialize_map(Visitor)
1695        }
1696    }
1697
1698    /// The [`AWS::CloudFormation::StackSet.DeploymentTargets`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-deploymenttargets.html) property type.
1699    #[derive(Debug, Default)]
1700    pub struct DeploymentTargets {
1701        /// Property [`Accounts`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-deploymenttargets.html#cfn-cloudformation-stackset-deploymenttargets-accounts).
1702        ///
1703        /// Update type: _Mutable_.
1704        /// AWS CloudFormation doesn't replace the resource when you change this property.
1705        pub accounts: Option<::ValueList<String>>,
1706        /// Property [`OrganizationalUnitIds`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-deploymenttargets.html#cfn-cloudformation-stackset-deploymenttargets-organizationalunitids).
1707        ///
1708        /// Update type: _Mutable_.
1709        /// AWS CloudFormation doesn't replace the resource when you change this property.
1710        pub organizational_unit_ids: Option<::ValueList<String>>,
1711    }
1712
1713    impl ::codec::SerializeValue for DeploymentTargets {
1714        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1715            let mut map = ::serde::Serializer::serialize_map(s, None)?;
1716            if let Some(ref accounts) = self.accounts {
1717                ::serde::ser::SerializeMap::serialize_entry(&mut map, "Accounts", accounts)?;
1718            }
1719            if let Some(ref organizational_unit_ids) = self.organizational_unit_ids {
1720                ::serde::ser::SerializeMap::serialize_entry(&mut map, "OrganizationalUnitIds", organizational_unit_ids)?;
1721            }
1722            ::serde::ser::SerializeMap::end(map)
1723        }
1724    }
1725
1726    impl ::codec::DeserializeValue for DeploymentTargets {
1727        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<DeploymentTargets, D::Error> {
1728            struct Visitor;
1729
1730            impl<'de> ::serde::de::Visitor<'de> for Visitor {
1731                type Value = DeploymentTargets;
1732
1733                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1734                    write!(f, "a struct of type DeploymentTargets")
1735                }
1736
1737                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1738                    let mut accounts: Option<::ValueList<String>> = None;
1739                    let mut organizational_unit_ids: Option<::ValueList<String>> = None;
1740
1741                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1742                        match __cfn_key.as_ref() {
1743                            "Accounts" => {
1744                                accounts = ::serde::de::MapAccess::next_value(&mut map)?;
1745                            }
1746                            "OrganizationalUnitIds" => {
1747                                organizational_unit_ids = ::serde::de::MapAccess::next_value(&mut map)?;
1748                            }
1749                            _ => {}
1750                        }
1751                    }
1752
1753                    Ok(DeploymentTargets {
1754                        accounts: accounts,
1755                        organizational_unit_ids: organizational_unit_ids,
1756                    })
1757                }
1758            }
1759
1760            d.deserialize_map(Visitor)
1761        }
1762    }
1763
1764    /// The [`AWS::CloudFormation::StackSet.OperationPreferences`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html) property type.
1765    #[derive(Debug, Default)]
1766    pub struct OperationPreferences {
1767        /// Property [`FailureToleranceCount`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-failuretolerancecount).
1768        ///
1769        /// Update type: _Mutable_.
1770        /// AWS CloudFormation doesn't replace the resource when you change this property.
1771        pub failure_tolerance_count: Option<::Value<u32>>,
1772        /// Property [`FailureTolerancePercentage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-failuretolerancepercentage).
1773        ///
1774        /// Update type: _Mutable_.
1775        /// AWS CloudFormation doesn't replace the resource when you change this property.
1776        pub failure_tolerance_percentage: Option<::Value<u32>>,
1777        /// Property [`MaxConcurrentCount`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-maxconcurrentcount).
1778        ///
1779        /// Update type: _Mutable_.
1780        /// AWS CloudFormation doesn't replace the resource when you change this property.
1781        pub max_concurrent_count: Option<::Value<u32>>,
1782        /// Property [`MaxConcurrentPercentage`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-maxconcurrentpercentage).
1783        ///
1784        /// Update type: _Mutable_.
1785        /// AWS CloudFormation doesn't replace the resource when you change this property.
1786        pub max_concurrent_percentage: Option<::Value<u32>>,
1787        /// Property [`RegionConcurrencyType`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-regionconcurrencytype).
1788        ///
1789        /// Update type: _Mutable_.
1790        /// AWS CloudFormation doesn't replace the resource when you change this property.
1791        pub region_concurrency_type: Option<::Value<String>>,
1792        /// Property [`RegionOrder`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-regionorder).
1793        ///
1794        /// Update type: _Mutable_.
1795        /// AWS CloudFormation doesn't replace the resource when you change this property.
1796        pub region_order: Option<::ValueList<String>>,
1797    }
1798
1799    impl ::codec::SerializeValue for OperationPreferences {
1800        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1801            let mut map = ::serde::Serializer::serialize_map(s, None)?;
1802            if let Some(ref failure_tolerance_count) = self.failure_tolerance_count {
1803                ::serde::ser::SerializeMap::serialize_entry(&mut map, "FailureToleranceCount", failure_tolerance_count)?;
1804            }
1805            if let Some(ref failure_tolerance_percentage) = self.failure_tolerance_percentage {
1806                ::serde::ser::SerializeMap::serialize_entry(&mut map, "FailureTolerancePercentage", failure_tolerance_percentage)?;
1807            }
1808            if let Some(ref max_concurrent_count) = self.max_concurrent_count {
1809                ::serde::ser::SerializeMap::serialize_entry(&mut map, "MaxConcurrentCount", max_concurrent_count)?;
1810            }
1811            if let Some(ref max_concurrent_percentage) = self.max_concurrent_percentage {
1812                ::serde::ser::SerializeMap::serialize_entry(&mut map, "MaxConcurrentPercentage", max_concurrent_percentage)?;
1813            }
1814            if let Some(ref region_concurrency_type) = self.region_concurrency_type {
1815                ::serde::ser::SerializeMap::serialize_entry(&mut map, "RegionConcurrencyType", region_concurrency_type)?;
1816            }
1817            if let Some(ref region_order) = self.region_order {
1818                ::serde::ser::SerializeMap::serialize_entry(&mut map, "RegionOrder", region_order)?;
1819            }
1820            ::serde::ser::SerializeMap::end(map)
1821        }
1822    }
1823
1824    impl ::codec::DeserializeValue for OperationPreferences {
1825        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<OperationPreferences, D::Error> {
1826            struct Visitor;
1827
1828            impl<'de> ::serde::de::Visitor<'de> for Visitor {
1829                type Value = OperationPreferences;
1830
1831                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1832                    write!(f, "a struct of type OperationPreferences")
1833                }
1834
1835                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1836                    let mut failure_tolerance_count: Option<::Value<u32>> = None;
1837                    let mut failure_tolerance_percentage: Option<::Value<u32>> = None;
1838                    let mut max_concurrent_count: Option<::Value<u32>> = None;
1839                    let mut max_concurrent_percentage: Option<::Value<u32>> = None;
1840                    let mut region_concurrency_type: Option<::Value<String>> = None;
1841                    let mut region_order: Option<::ValueList<String>> = None;
1842
1843                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1844                        match __cfn_key.as_ref() {
1845                            "FailureToleranceCount" => {
1846                                failure_tolerance_count = ::serde::de::MapAccess::next_value(&mut map)?;
1847                            }
1848                            "FailureTolerancePercentage" => {
1849                                failure_tolerance_percentage = ::serde::de::MapAccess::next_value(&mut map)?;
1850                            }
1851                            "MaxConcurrentCount" => {
1852                                max_concurrent_count = ::serde::de::MapAccess::next_value(&mut map)?;
1853                            }
1854                            "MaxConcurrentPercentage" => {
1855                                max_concurrent_percentage = ::serde::de::MapAccess::next_value(&mut map)?;
1856                            }
1857                            "RegionConcurrencyType" => {
1858                                region_concurrency_type = ::serde::de::MapAccess::next_value(&mut map)?;
1859                            }
1860                            "RegionOrder" => {
1861                                region_order = ::serde::de::MapAccess::next_value(&mut map)?;
1862                            }
1863                            _ => {}
1864                        }
1865                    }
1866
1867                    Ok(OperationPreferences {
1868                        failure_tolerance_count: failure_tolerance_count,
1869                        failure_tolerance_percentage: failure_tolerance_percentage,
1870                        max_concurrent_count: max_concurrent_count,
1871                        max_concurrent_percentage: max_concurrent_percentage,
1872                        region_concurrency_type: region_concurrency_type,
1873                        region_order: region_order,
1874                    })
1875                }
1876            }
1877
1878            d.deserialize_map(Visitor)
1879        }
1880    }
1881
1882    /// The [`AWS::CloudFormation::StackSet.Parameter`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-parameter.html) property type.
1883    #[derive(Debug, Default)]
1884    pub struct Parameter {
1885        /// Property [`ParameterKey`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-parameter.html#cfn-cloudformation-stackset-parameter-parameterkey).
1886        ///
1887        /// Update type: _Mutable_.
1888        /// AWS CloudFormation doesn't replace the resource when you change this property.
1889        pub parameter_key: ::Value<String>,
1890        /// Property [`ParameterValue`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-parameter.html#cfn-cloudformation-stackset-parameter-parametervalue).
1891        ///
1892        /// Update type: _Mutable_.
1893        /// AWS CloudFormation doesn't replace the resource when you change this property.
1894        pub parameter_value: ::Value<String>,
1895    }
1896
1897    impl ::codec::SerializeValue for Parameter {
1898        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1899            let mut map = ::serde::Serializer::serialize_map(s, None)?;
1900            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ParameterKey", &self.parameter_key)?;
1901            ::serde::ser::SerializeMap::serialize_entry(&mut map, "ParameterValue", &self.parameter_value)?;
1902            ::serde::ser::SerializeMap::end(map)
1903        }
1904    }
1905
1906    impl ::codec::DeserializeValue for Parameter {
1907        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<Parameter, D::Error> {
1908            struct Visitor;
1909
1910            impl<'de> ::serde::de::Visitor<'de> for Visitor {
1911                type Value = Parameter;
1912
1913                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1914                    write!(f, "a struct of type Parameter")
1915                }
1916
1917                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1918                    let mut parameter_key: Option<::Value<String>> = None;
1919                    let mut parameter_value: Option<::Value<String>> = None;
1920
1921                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1922                        match __cfn_key.as_ref() {
1923                            "ParameterKey" => {
1924                                parameter_key = ::serde::de::MapAccess::next_value(&mut map)?;
1925                            }
1926                            "ParameterValue" => {
1927                                parameter_value = ::serde::de::MapAccess::next_value(&mut map)?;
1928                            }
1929                            _ => {}
1930                        }
1931                    }
1932
1933                    Ok(Parameter {
1934                        parameter_key: parameter_key.ok_or(::serde::de::Error::missing_field("ParameterKey"))?,
1935                        parameter_value: parameter_value.ok_or(::serde::de::Error::missing_field("ParameterValue"))?,
1936                    })
1937                }
1938            }
1939
1940            d.deserialize_map(Visitor)
1941        }
1942    }
1943
1944    /// The [`AWS::CloudFormation::StackSet.StackInstances`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-stackinstances.html) property type.
1945    #[derive(Debug, Default)]
1946    pub struct StackInstances {
1947        /// Property [`DeploymentTargets`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-stackinstances.html#cfn-cloudformation-stackset-stackinstances-deploymenttargets).
1948        ///
1949        /// Update type: _Mutable_.
1950        /// AWS CloudFormation doesn't replace the resource when you change this property.
1951        pub deployment_targets: ::Value<DeploymentTargets>,
1952        /// Property [`ParameterOverrides`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-stackinstances.html#cfn-cloudformation-stackset-stackinstances-parameteroverrides).
1953        ///
1954        /// Update type: _Mutable_.
1955        /// AWS CloudFormation doesn't replace the resource when you change this property.
1956        pub parameter_overrides: Option<::ValueList<Parameter>>,
1957        /// Property [`Regions`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-stackinstances.html#cfn-cloudformation-stackset-stackinstances-regions).
1958        ///
1959        /// Update type: _Mutable_.
1960        /// AWS CloudFormation doesn't replace the resource when you change this property.
1961        pub regions: ::ValueList<String>,
1962    }
1963
1964    impl ::codec::SerializeValue for StackInstances {
1965        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
1966            let mut map = ::serde::Serializer::serialize_map(s, None)?;
1967            ::serde::ser::SerializeMap::serialize_entry(&mut map, "DeploymentTargets", &self.deployment_targets)?;
1968            if let Some(ref parameter_overrides) = self.parameter_overrides {
1969                ::serde::ser::SerializeMap::serialize_entry(&mut map, "ParameterOverrides", parameter_overrides)?;
1970            }
1971            ::serde::ser::SerializeMap::serialize_entry(&mut map, "Regions", &self.regions)?;
1972            ::serde::ser::SerializeMap::end(map)
1973        }
1974    }
1975
1976    impl ::codec::DeserializeValue for StackInstances {
1977        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<StackInstances, D::Error> {
1978            struct Visitor;
1979
1980            impl<'de> ::serde::de::Visitor<'de> for Visitor {
1981                type Value = StackInstances;
1982
1983                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
1984                    write!(f, "a struct of type StackInstances")
1985                }
1986
1987                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
1988                    let mut deployment_targets: Option<::Value<DeploymentTargets>> = None;
1989                    let mut parameter_overrides: Option<::ValueList<Parameter>> = None;
1990                    let mut regions: Option<::ValueList<String>> = None;
1991
1992                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
1993                        match __cfn_key.as_ref() {
1994                            "DeploymentTargets" => {
1995                                deployment_targets = ::serde::de::MapAccess::next_value(&mut map)?;
1996                            }
1997                            "ParameterOverrides" => {
1998                                parameter_overrides = ::serde::de::MapAccess::next_value(&mut map)?;
1999                            }
2000                            "Regions" => {
2001                                regions = ::serde::de::MapAccess::next_value(&mut map)?;
2002                            }
2003                            _ => {}
2004                        }
2005                    }
2006
2007                    Ok(StackInstances {
2008                        deployment_targets: deployment_targets.ok_or(::serde::de::Error::missing_field("DeploymentTargets"))?,
2009                        parameter_overrides: parameter_overrides,
2010                        regions: regions.ok_or(::serde::de::Error::missing_field("Regions"))?,
2011                    })
2012                }
2013            }
2014
2015            d.deserialize_map(Visitor)
2016        }
2017    }
2018}
2019
2020pub mod type_activation {
2021    //! Property types for the `TypeActivation` resource.
2022
2023    /// The [`AWS::CloudFormation::TypeActivation.LoggingConfig`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-typeactivation-loggingconfig.html) property type.
2024    #[derive(Debug, Default)]
2025    pub struct LoggingConfig {
2026        /// Property [`LogGroupName`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-typeactivation-loggingconfig.html#cfn-cloudformation-typeactivation-loggingconfig-loggroupname).
2027        ///
2028        /// Update type: _Immutable_.
2029        /// AWS CloudFormation replaces the resource when you change this property.
2030        pub log_group_name: Option<::Value<String>>,
2031        /// Property [`LogRoleArn`](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-typeactivation-loggingconfig.html#cfn-cloudformation-typeactivation-loggingconfig-logrolearn).
2032        ///
2033        /// Update type: _Immutable_.
2034        /// AWS CloudFormation replaces the resource when you change this property.
2035        pub log_role_arn: Option<::Value<String>>,
2036    }
2037
2038    impl ::codec::SerializeValue for LoggingConfig {
2039        fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
2040            let mut map = ::serde::Serializer::serialize_map(s, None)?;
2041            if let Some(ref log_group_name) = self.log_group_name {
2042                ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogGroupName", log_group_name)?;
2043            }
2044            if let Some(ref log_role_arn) = self.log_role_arn {
2045                ::serde::ser::SerializeMap::serialize_entry(&mut map, "LogRoleArn", log_role_arn)?;
2046            }
2047            ::serde::ser::SerializeMap::end(map)
2048        }
2049    }
2050
2051    impl ::codec::DeserializeValue for LoggingConfig {
2052        fn deserialize<'de, D: ::serde::Deserializer<'de>>(d: D) -> Result<LoggingConfig, D::Error> {
2053            struct Visitor;
2054
2055            impl<'de> ::serde::de::Visitor<'de> for Visitor {
2056                type Value = LoggingConfig;
2057
2058                fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
2059                    write!(f, "a struct of type LoggingConfig")
2060                }
2061
2062                fn visit_map<A: ::serde::de::MapAccess<'de>>(self, mut map: A) -> Result<Self::Value, A::Error> {
2063                    let mut log_group_name: Option<::Value<String>> = None;
2064                    let mut log_role_arn: Option<::Value<String>> = None;
2065
2066                    while let Some(__cfn_key) = ::serde::de::MapAccess::next_key::<String>(&mut map)? {
2067                        match __cfn_key.as_ref() {
2068                            "LogGroupName" => {
2069                                log_group_name = ::serde::de::MapAccess::next_value(&mut map)?;
2070                            }
2071                            "LogRoleArn" => {
2072                                log_role_arn = ::serde::de::MapAccess::next_value(&mut map)?;
2073                            }
2074                            _ => {}
2075                        }
2076                    }
2077
2078                    Ok(LoggingConfig {
2079                        log_group_name: log_group_name,
2080                        log_role_arn: log_role_arn,
2081                    })
2082                }
2083            }
2084
2085            d.deserialize_map(Visitor)
2086        }
2087    }
2088}