cfn/aws/
mediapackage.rs

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