pub mod actionconnector {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-apikeyconnectionmetadata.html
    pub struct APIKeyConnectionMetadata_ {
        pub api_key: crate::value::ExpString,
        pub base_endpoint: crate::value::ExpString,
        pub email: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_APIKeyConnectionMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.APIKeyConnectionMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_APIKeyConnectionMetadata as APIKeyConnectionMetadata;
    impl crate::value::ToValue for APIKeyConnectionMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ApiKey".to_string(),
                crate::value::ToValue::to_value(&self.api_key),
            );
            properties.insert(
                "BaseEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.base_endpoint),
            );
            if let Some(ref value) = self.email {
                properties.insert("Email".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-authconfig.html
    pub struct AuthConfig_ {
        pub authentication_metadata: Box<AuthenticationMetadata_>,
        pub authentication_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_AuthConfig {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.AuthConfig"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_AuthConfig as AuthConfig;
    impl crate::value::ToValue for AuthConfig_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AuthenticationMetadata".to_string(),
                crate::value::ToValue::to_value(&self.authentication_metadata),
            );
            properties.insert(
                "AuthenticationType".to_string(),
                crate::value::ToValue::to_value(&self.authentication_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-authenticationmetadata.html
    pub struct AuthenticationMetadata_ {
        pub api_key_connection_metadata: Option<Box<APIKeyConnectionMetadata_>>,
        pub authorization_code_grant_metadata: Option<Box<AuthorizationCodeGrantMetadata_>>,
        pub basic_auth_connection_metadata: Option<Box<BasicAuthConnectionMetadata_>>,
        pub client_credentials_grant_metadata: Option<Box<ClientCredentialsGrantMetadata_>>,
        pub iam_connection_metadata: Option<Box<IAMConnectionMetadata_>>,
        pub none_connection_metadata: Option<Box<NoneConnectionMetadata_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_AuthenticationMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.AuthenticationMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_AuthenticationMetadata as AuthenticationMetadata;
    impl crate::value::ToValue for AuthenticationMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.api_key_connection_metadata {
                properties.insert(
                    "ApiKeyConnectionMetadata".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.authorization_code_grant_metadata {
                properties.insert(
                    "AuthorizationCodeGrantMetadata".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.basic_auth_connection_metadata {
                properties.insert(
                    "BasicAuthConnectionMetadata".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.client_credentials_grant_metadata {
                properties.insert(
                    "ClientCredentialsGrantMetadata".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.iam_connection_metadata {
                properties.insert(
                    "IamConnectionMetadata".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.none_connection_metadata {
                properties.insert(
                    "NoneConnectionMetadata".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-authorizationcodegrantcredentialsdetails.html
    pub struct AuthorizationCodeGrantCredentialsDetails_ {
        pub authorization_code_grant_details: Box<AuthorizationCodeGrantDetails_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_AuthorizationCodeGrantCredentialsDetails {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.AuthorizationCodeGrantCredentialsDetails"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_AuthorizationCodeGrantCredentialsDetails as AuthorizationCodeGrantCredentialsDetails;
    impl crate::value::ToValue for AuthorizationCodeGrantCredentialsDetails_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AuthorizationCodeGrantDetails".to_string(),
                crate::value::ToValue::to_value(&self.authorization_code_grant_details),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-authorizationcodegrantdetails.html
    pub struct AuthorizationCodeGrantDetails_ {
        pub authorization_endpoint: crate::value::ExpString,
        pub client_id: crate::value::ExpString,
        pub client_secret: crate::value::ExpString,
        pub token_endpoint: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_AuthorizationCodeGrantDetails {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.AuthorizationCodeGrantDetails"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_AuthorizationCodeGrantDetails as AuthorizationCodeGrantDetails;
    impl crate::value::ToValue for AuthorizationCodeGrantDetails_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AuthorizationEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.authorization_endpoint),
            );
            properties.insert(
                "ClientId".to_string(),
                crate::value::ToValue::to_value(&self.client_id),
            );
            properties.insert(
                "ClientSecret".to_string(),
                crate::value::ToValue::to_value(&self.client_secret),
            );
            properties.insert(
                "TokenEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.token_endpoint),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-authorizationcodegrantmetadata.html
    pub struct AuthorizationCodeGrantMetadata_ {
        pub authorization_code_grant_credentials_details:
            Option<Box<AuthorizationCodeGrantCredentialsDetails_>>,
        pub authorization_code_grant_credentials_source: Option<crate::value::ExpString>,
        pub base_endpoint: crate::value::ExpString,
        pub redirect_url: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_AuthorizationCodeGrantMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.AuthorizationCodeGrantMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_AuthorizationCodeGrantMetadata as AuthorizationCodeGrantMetadata;
    impl crate::value::ToValue for AuthorizationCodeGrantMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.authorization_code_grant_credentials_details {
                properties.insert(
                    "AuthorizationCodeGrantCredentialsDetails".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.authorization_code_grant_credentials_source {
                properties.insert(
                    "AuthorizationCodeGrantCredentialsSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "BaseEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.base_endpoint),
            );
            properties.insert(
                "RedirectUrl".to_string(),
                crate::value::ToValue::to_value(&self.redirect_url),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-basicauthconnectionmetadata.html
    pub struct BasicAuthConnectionMetadata_ {
        pub base_endpoint: crate::value::ExpString,
        pub password: crate::value::ExpString,
        pub username: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_BasicAuthConnectionMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.BasicAuthConnectionMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_BasicAuthConnectionMetadata as BasicAuthConnectionMetadata;
    impl crate::value::ToValue for BasicAuthConnectionMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BaseEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.base_endpoint),
            );
            properties.insert(
                "Password".to_string(),
                crate::value::ToValue::to_value(&self.password),
            );
            properties.insert(
                "Username".to_string(),
                crate::value::ToValue::to_value(&self.username),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-clientcredentialsdetails.html
    pub struct ClientCredentialsDetails_ {
        pub client_credentials_grant_details: Box<ClientCredentialsGrantDetails_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_ClientCredentialsDetails {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.ClientCredentialsDetails"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_ClientCredentialsDetails as ClientCredentialsDetails;
    impl crate::value::ToValue for ClientCredentialsDetails_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ClientCredentialsGrantDetails".to_string(),
                crate::value::ToValue::to_value(&self.client_credentials_grant_details),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-clientcredentialsgrantdetails.html
    pub struct ClientCredentialsGrantDetails_ {
        pub client_id: crate::value::ExpString,
        pub client_secret: crate::value::ExpString,
        pub token_endpoint: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_ClientCredentialsGrantDetails {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.ClientCredentialsGrantDetails"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_ClientCredentialsGrantDetails as ClientCredentialsGrantDetails;
    impl crate::value::ToValue for ClientCredentialsGrantDetails_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ClientId".to_string(),
                crate::value::ToValue::to_value(&self.client_id),
            );
            properties.insert(
                "ClientSecret".to_string(),
                crate::value::ToValue::to_value(&self.client_secret),
            );
            properties.insert(
                "TokenEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.token_endpoint),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-clientcredentialsgrantmetadata.html
    pub struct ClientCredentialsGrantMetadata_ {
        pub base_endpoint: crate::value::ExpString,
        pub client_credentials_details: Option<Box<ClientCredentialsDetails_>>,
        pub client_credentials_source: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_ClientCredentialsGrantMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.ClientCredentialsGrantMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_ClientCredentialsGrantMetadata as ClientCredentialsGrantMetadata;
    impl crate::value::ToValue for ClientCredentialsGrantMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BaseEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.base_endpoint),
            );
            if let Some(ref value) = self.client_credentials_details {
                properties.insert(
                    "ClientCredentialsDetails".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.client_credentials_source {
                properties.insert(
                    "ClientCredentialsSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-iamconnectionmetadata.html
    pub struct IAMConnectionMetadata_ {
        pub role_arn: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_IAMConnectionMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.IAMConnectionMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_IAMConnectionMetadata as IAMConnectionMetadata;
    impl crate::value::ToValue for IAMConnectionMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "RoleArn".to_string(),
                crate::value::ToValue::to_value(&self.role_arn),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-noneconnectionmetadata.html
    pub struct NoneConnectionMetadata_ {
        pub base_endpoint: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_NoneConnectionMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.NoneConnectionMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_NoneConnectionMetadata as NoneConnectionMetadata;
    impl crate::value::ToValue for NoneConnectionMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BaseEndpoint".to_string(),
                crate::value::ToValue::to_value(&self.base_endpoint),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-actionconnector-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_ActionConnector_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::ActionConnector.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_ActionConnector_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
}
pub mod analysis {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-aggregationfunction.html
    pub struct AggregationFunction_ {
        pub attribute_aggregation_function: Option<Box<AttributeAggregationFunction_>>,
        pub categorical_aggregation_function: Option<crate::value::ExpString>,
        pub date_aggregation_function: Option<crate::value::ExpString>,
        pub numerical_aggregation_function: Option<Box<NumericalAggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AggregationFunction as AggregationFunction;
    impl crate::value::ToValue for AggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.attribute_aggregation_function {
                properties.insert(
                    "AttributeAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categorical_aggregation_function {
                properties.insert(
                    "CategoricalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_aggregation_function {
                properties.insert(
                    "DateAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_aggregation_function {
                properties.insert(
                    "NumericalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-aggregationsortconfiguration.html
    pub struct AggregationSortConfiguration_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub sort_direction: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AggregationSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AggregationSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AggregationSortConfiguration as AggregationSortConfiguration;
    impl crate::value::ToValue for AggregationSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "SortDirection".to_string(),
                crate::value::ToValue::to_value(&self.sort_direction),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysisdefaults.html
    pub struct AnalysisDefaults_ {
        pub default_new_sheet_configuration: Box<DefaultNewSheetConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AnalysisDefaults {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AnalysisDefaults"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AnalysisDefaults as AnalysisDefaults;
    impl crate::value::ToValue for AnalysisDefaults_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DefaultNewSheetConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.default_new_sheet_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysisdefinition.html
    pub struct AnalysisDefinition_ {
        pub analysis_defaults: Option<Box<AnalysisDefaults_>>,
        pub calculated_fields: Option<Vec<CalculatedField_>>,
        pub column_configurations: Option<Vec<ColumnConfiguration_>>,
        pub data_set_identifier_declarations: Vec<DataSetIdentifierDeclaration_>,
        pub filter_groups: Option<Vec<FilterGroup_>>,
        pub options: Option<Box<AssetOptions_>>,
        pub parameter_declarations: Option<Vec<ParameterDeclaration_>>,
        pub query_execution_options: Option<Box<QueryExecutionOptions_>>,
        pub sheets: Option<Vec<SheetDefinition_>>,
        pub static_files: Option<Vec<StaticFile_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AnalysisDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AnalysisDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AnalysisDefinition as AnalysisDefinition;
    impl crate::value::ToValue for AnalysisDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.analysis_defaults {
                properties.insert(
                    "AnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.calculated_fields {
                properties.insert(
                    "CalculatedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_configurations {
                properties.insert(
                    "ColumnConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifierDeclarations".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier_declarations),
            );
            if let Some(ref value) = self.filter_groups {
                properties.insert(
                    "FilterGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.options {
                properties.insert(
                    "Options".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.parameter_declarations {
                properties.insert(
                    "ParameterDeclarations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.query_execution_options {
                properties.insert(
                    "QueryExecutionOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheets {
                properties.insert("Sheets".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.static_files {
                properties.insert(
                    "StaticFiles".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysiserror.html
    pub struct AnalysisError_ {
        pub message: Option<crate::value::ExpString>,
        pub r#type: Option<crate::value::ExpString>,
        pub violated_entities: Option<Vec<Entity_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AnalysisError {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AnalysisError"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AnalysisError as AnalysisError;
    impl crate::value::ToValue for AnalysisError_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.message {
                properties.insert(
                    "Message".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.violated_entities {
                properties.insert(
                    "ViolatedEntities".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysissourceentity.html
    pub struct AnalysisSourceEntity_ {
        pub source_template: Option<Box<AnalysisSourceTemplate_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AnalysisSourceEntity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AnalysisSourceEntity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AnalysisSourceEntity as AnalysisSourceEntity;
    impl crate::value::ToValue for AnalysisSourceEntity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source_template {
                properties.insert(
                    "SourceTemplate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysissourcetemplate.html
    pub struct AnalysisSourceTemplate_ {
        pub arn: crate::value::ExpString,
        pub data_set_references: Vec<DataSetReference_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AnalysisSourceTemplate {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AnalysisSourceTemplate"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AnalysisSourceTemplate as AnalysisSourceTemplate;
    impl crate::value::ToValue for AnalysisSourceTemplate_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Arn".to_string(),
                crate::value::ToValue::to_value(&self.arn),
            );
            properties.insert(
                "DataSetReferences".to_string(),
                crate::value::ToValue::to_value(&self.data_set_references),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-anchordateconfiguration.html
    pub struct AnchorDateConfiguration_ {
        pub anchor_option: Option<crate::value::ExpString>,
        pub parameter_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AnchorDateConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AnchorDateConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AnchorDateConfiguration as AnchorDateConfiguration;
    impl crate::value::ToValue for AnchorDateConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.anchor_option {
                properties.insert(
                    "AnchorOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-arcaxisconfiguration.html
    pub struct ArcAxisConfiguration_ {
        pub range: Option<Box<ArcAxisDisplayRange_>>,
        pub reserve_range: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ArcAxisConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ArcAxisConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ArcAxisConfiguration as ArcAxisConfiguration;
    impl crate::value::ToValue for ArcAxisConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.range {
                properties.insert("Range".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.reserve_range {
                properties.insert(
                    "ReserveRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-arcaxisdisplayrange.html
    pub struct ArcAxisDisplayRange_ {
        pub max: Option<f64>,
        pub min: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ArcAxisDisplayRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ArcAxisDisplayRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ArcAxisDisplayRange as ArcAxisDisplayRange;
    impl crate::value::ToValue for ArcAxisDisplayRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.max {
                properties.insert("Max".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.min {
                properties.insert("Min".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-arcconfiguration.html
    pub struct ArcConfiguration_ {
        pub arc_angle: Option<f64>,
        pub arc_thickness: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ArcConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ArcConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ArcConfiguration as ArcConfiguration;
    impl crate::value::ToValue for ArcConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_angle {
                properties.insert(
                    "ArcAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.arc_thickness {
                properties.insert(
                    "ArcThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-arcoptions.html
    pub struct ArcOptions_ {
        pub arc_thickness: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ArcOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ArcOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ArcOptions as ArcOptions;
    impl crate::value::ToValue for ArcOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_thickness {
                properties.insert(
                    "ArcThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-assetoptions.html
    pub struct AssetOptions_ {
        pub timezone: Option<crate::value::ExpString>,
        pub week_start: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AssetOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AssetOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AssetOptions as AssetOptions;
    impl crate::value::ToValue for AssetOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.timezone {
                properties.insert(
                    "Timezone".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.week_start {
                properties.insert(
                    "WeekStart".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-attributeaggregationfunction.html
    pub struct AttributeAggregationFunction_ {
        pub simple_attribute_aggregation: Option<crate::value::ExpString>,
        pub value_for_multiple_values: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AttributeAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AttributeAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AttributeAggregationFunction as AttributeAggregationFunction;
    impl crate::value::ToValue for AttributeAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_attribute_aggregation {
                properties.insert(
                    "SimpleAttributeAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_for_multiple_values {
                properties.insert(
                    "ValueForMultipleValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axisdataoptions.html
    pub struct AxisDataOptions_ {
        pub date_axis_options: Option<Box<DateAxisOptions_>>,
        pub numeric_axis_options: Option<Box<NumericAxisOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisDataOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisDataOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisDataOptions as AxisDataOptions;
    impl crate::value::ToValue for AxisDataOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_axis_options {
                properties.insert(
                    "DateAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_axis_options {
                properties.insert(
                    "NumericAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axisdisplayminmaxrange.html
    pub struct AxisDisplayMinMaxRange_ {
        pub maximum: Option<f64>,
        pub minimum: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisDisplayMinMaxRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisDisplayMinMaxRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisDisplayMinMaxRange as AxisDisplayMinMaxRange;
    impl crate::value::ToValue for AxisDisplayMinMaxRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.maximum {
                properties.insert(
                    "Maximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum {
                properties.insert(
                    "Minimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axisdisplayoptions.html
    pub struct AxisDisplayOptions_ {
        pub axis_line_visibility: Option<crate::value::ExpString>,
        pub axis_offset: Option<crate::value::ExpString>,
        pub data_options: Option<Box<AxisDataOptions_>>,
        pub grid_line_visibility: Option<crate::value::ExpString>,
        pub scrollbar_options: Option<Box<ScrollBarOptions_>>,
        pub tick_label_options: Option<Box<AxisTickLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisDisplayOptions as AxisDisplayOptions;
    impl crate::value::ToValue for AxisDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_line_visibility {
                properties.insert(
                    "AxisLineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.axis_offset {
                properties.insert(
                    "AxisOffset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_options {
                properties.insert(
                    "DataOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid_line_visibility {
                properties.insert(
                    "GridLineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scrollbar_options {
                properties.insert(
                    "ScrollbarOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tick_label_options {
                properties.insert(
                    "TickLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axisdisplayrange.html
    pub struct AxisDisplayRange_ {
        pub data_driven: Option<serde_json::Value>,
        pub min_max: Option<Box<AxisDisplayMinMaxRange_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisDisplayRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisDisplayRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisDisplayRange as AxisDisplayRange;
    impl crate::value::ToValue for AxisDisplayRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_driven {
                properties.insert(
                    "DataDriven".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.min_max {
                properties.insert("MinMax".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axislabeloptions.html
    pub struct AxisLabelOptions_ {
        pub apply_to: Option<Box<AxisLabelReferenceOptions_>>,
        pub custom_label: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisLabelOptions as AxisLabelOptions;
    impl crate::value::ToValue for AxisLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.apply_to {
                properties.insert(
                    "ApplyTo".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axislabelreferenceoptions.html
    pub struct AxisLabelReferenceOptions_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisLabelReferenceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisLabelReferenceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisLabelReferenceOptions as AxisLabelReferenceOptions;
    impl crate::value::ToValue for AxisLabelReferenceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axislinearscale.html
    pub struct AxisLinearScale_ {
        pub step_count: Option<f64>,
        pub step_size: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisLinearScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisLinearScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisLinearScale as AxisLinearScale;
    impl crate::value::ToValue for AxisLinearScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.step_count {
                properties.insert(
                    "StepCount".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.step_size {
                properties.insert(
                    "StepSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axislogarithmicscale.html
    pub struct AxisLogarithmicScale_ {
        pub base: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisLogarithmicScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisLogarithmicScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisLogarithmicScale as AxisLogarithmicScale;
    impl crate::value::ToValue for AxisLogarithmicScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.base {
                properties.insert("Base".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axisscale.html
    pub struct AxisScale_ {
        pub linear: Option<Box<AxisLinearScale_>>,
        pub logarithmic: Option<Box<AxisLogarithmicScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisScale as AxisScale;
    impl crate::value::ToValue for AxisScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.linear {
                properties.insert("Linear".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.logarithmic {
                properties.insert(
                    "Logarithmic".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-axisticklabeloptions.html
    pub struct AxisTickLabelOptions_ {
        pub label_options: Option<Box<LabelOptions_>>,
        pub rotation_angle: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_AxisTickLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.AxisTickLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_AxisTickLabelOptions as AxisTickLabelOptions;
    impl crate::value::ToValue for AxisTickLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_options {
                properties.insert(
                    "LabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rotation_angle {
                properties.insert(
                    "RotationAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-barchartaggregatedfieldwells.html
    pub struct BarChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BarChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BarChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BarChartAggregatedFieldWells as BarChartAggregatedFieldWells;
    impl crate::value::ToValue for BarChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-barchartconfiguration.html
    pub struct BarChartConfiguration_ {
        pub bars_arrangement: Option<crate::value::ExpString>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<BarChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub orientation: Option<crate::value::ExpString>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<BarChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_axis: Option<Box<AxisDisplayOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BarChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BarChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BarChartConfiguration as BarChartConfiguration;
    impl crate::value::ToValue for BarChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bars_arrangement {
                properties.insert(
                    "BarsArrangement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.orientation {
                properties.insert(
                    "Orientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_axis {
                properties.insert(
                    "ValueAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-barchartfieldwells.html
    pub struct BarChartFieldWells_ {
        pub bar_chart_aggregated_field_wells: Option<Box<BarChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BarChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BarChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BarChartFieldWells as BarChartFieldWells;
    impl crate::value::ToValue for BarChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_chart_aggregated_field_wells {
                properties.insert(
                    "BarChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-barchartsortconfiguration.html
    pub struct BarChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BarChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BarChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BarChartSortConfiguration as BarChartSortConfiguration;
    impl crate::value::ToValue for BarChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-barchartvisual.html
    pub struct BarChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<BarChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BarChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BarChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BarChartVisual as BarChartVisual;
    impl crate::value::ToValue for BarChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bincountoptions.html
    pub struct BinCountOptions_ {
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BinCountOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BinCountOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BinCountOptions as BinCountOptions;
    impl crate::value::ToValue for BinCountOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-binwidthoptions.html
    pub struct BinWidthOptions_ {
        pub bin_count_limit: Option<f64>,
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BinWidthOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BinWidthOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BinWidthOptions as BinWidthOptions;
    impl crate::value::ToValue for BinWidthOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_count_limit {
                properties.insert(
                    "BinCountLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectionconfiguration.html
    pub struct BodySectionConfiguration_ {
        pub content: Box<BodySectionContent_>,
        pub page_break_configuration: Option<Box<SectionPageBreakConfiguration_>>,
        pub repeat_configuration: Option<Box<BodySectionRepeatConfiguration_>>,
        pub section_id: crate::value::ExpString,
        pub style: Option<Box<SectionStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionConfiguration as BodySectionConfiguration;
    impl crate::value::ToValue for BodySectionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Content".to_string(),
                crate::value::ToValue::to_value(&self.content),
            );
            if let Some(ref value) = self.page_break_configuration {
                properties.insert(
                    "PageBreakConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.repeat_configuration {
                properties.insert(
                    "RepeatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SectionId".to_string(),
                crate::value::ToValue::to_value(&self.section_id),
            );
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectioncontent.html
    pub struct BodySectionContent_ {
        pub layout: Option<Box<SectionLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionContent as BodySectionContent;
    impl crate::value::ToValue for BodySectionContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.layout {
                properties.insert("Layout".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectiondynamiccategorydimensionconfiguration.html
    pub struct BodySectionDynamicCategoryDimensionConfiguration_ {
        pub column: Box<ColumnIdentifier_>,
        pub limit: Option<f64>,
        pub sort_by_metrics: Option<Vec<ColumnSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionDynamicCategoryDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionDynamicCategoryDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionDynamicCategoryDimensionConfiguration as BodySectionDynamicCategoryDimensionConfiguration;
    impl crate::value::ToValue for BodySectionDynamicCategoryDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_by_metrics {
                properties.insert(
                    "SortByMetrics".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectiondynamicnumericdimensionconfiguration.html
    pub struct BodySectionDynamicNumericDimensionConfiguration_ {
        pub column: Box<ColumnIdentifier_>,
        pub limit: Option<f64>,
        pub sort_by_metrics: Option<Vec<ColumnSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionDynamicNumericDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionDynamicNumericDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionDynamicNumericDimensionConfiguration as BodySectionDynamicNumericDimensionConfiguration;
    impl crate::value::ToValue for BodySectionDynamicNumericDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_by_metrics {
                properties.insert(
                    "SortByMetrics".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectionrepeatconfiguration.html
    pub struct BodySectionRepeatConfiguration_ {
        pub dimension_configurations: Option<Vec<BodySectionRepeatDimensionConfiguration_>>,
        pub non_repeating_visuals: Option<Vec<crate::value::ExpString>>,
        pub page_break_configuration: Option<Box<BodySectionRepeatPageBreakConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionRepeatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionRepeatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionRepeatConfiguration as BodySectionRepeatConfiguration;
    impl crate::value::ToValue for BodySectionRepeatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dimension_configurations {
                properties.insert(
                    "DimensionConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.non_repeating_visuals {
                properties.insert(
                    "NonRepeatingVisuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.page_break_configuration {
                properties.insert(
                    "PageBreakConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectionrepeatdimensionconfiguration.html
    pub struct BodySectionRepeatDimensionConfiguration_ {
        pub dynamic_category_dimension_configuration:
            Option<Box<BodySectionDynamicCategoryDimensionConfiguration_>>,
        pub dynamic_numeric_dimension_configuration:
            Option<Box<BodySectionDynamicNumericDimensionConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionRepeatDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionRepeatDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionRepeatDimensionConfiguration as BodySectionRepeatDimensionConfiguration;
    impl crate::value::ToValue for BodySectionRepeatDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_category_dimension_configuration {
                properties.insert(
                    "DynamicCategoryDimensionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dynamic_numeric_dimension_configuration {
                properties.insert(
                    "DynamicNumericDimensionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-bodysectionrepeatpagebreakconfiguration.html
    pub struct BodySectionRepeatPageBreakConfiguration_ {
        pub after: Option<Box<SectionAfterPageBreak_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BodySectionRepeatPageBreakConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BodySectionRepeatPageBreakConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BodySectionRepeatPageBreakConfiguration as BodySectionRepeatPageBreakConfiguration;
    impl crate::value::ToValue for BodySectionRepeatPageBreakConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.after {
                properties.insert("After".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotaggregatedfieldwells.html
    pub struct BoxPlotAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotAggregatedFieldWells as BoxPlotAggregatedFieldWells;
    impl crate::value::ToValue for BoxPlotAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotchartconfiguration.html
    pub struct BoxPlotChartConfiguration_ {
        pub box_plot_options: Option<Box<BoxPlotOptions_>>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<BoxPlotFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub sort_configuration: Option<Box<BoxPlotSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotChartConfiguration as BoxPlotChartConfiguration;
    impl crate::value::ToValue for BoxPlotChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.box_plot_options {
                properties.insert(
                    "BoxPlotOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotfieldwells.html
    pub struct BoxPlotFieldWells_ {
        pub box_plot_aggregated_field_wells: Option<Box<BoxPlotAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotFieldWells as BoxPlotFieldWells;
    impl crate::value::ToValue for BoxPlotFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.box_plot_aggregated_field_wells {
                properties.insert(
                    "BoxPlotAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotoptions.html
    pub struct BoxPlotOptions_ {
        pub all_data_points_visibility: Option<crate::value::ExpString>,
        pub outlier_visibility: Option<crate::value::ExpString>,
        pub style_options: Option<Box<BoxPlotStyleOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotOptions as BoxPlotOptions;
    impl crate::value::ToValue for BoxPlotOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.all_data_points_visibility {
                properties.insert(
                    "AllDataPointsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.outlier_visibility {
                properties.insert(
                    "OutlierVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.style_options {
                properties.insert(
                    "StyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotsortconfiguration.html
    pub struct BoxPlotSortConfiguration_ {
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub pagination_configuration: Option<Box<PaginationConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotSortConfiguration as BoxPlotSortConfiguration;
    impl crate::value::ToValue for BoxPlotSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pagination_configuration {
                properties.insert(
                    "PaginationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotstyleoptions.html
    pub struct BoxPlotStyleOptions_ {
        pub fill_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotStyleOptions as BoxPlotStyleOptions;
    impl crate::value::ToValue for BoxPlotStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_style {
                properties.insert(
                    "FillStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-boxplotvisual.html
    pub struct BoxPlotVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<BoxPlotChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_BoxPlotVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.BoxPlotVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_BoxPlotVisual as BoxPlotVisual;
    impl crate::value::ToValue for BoxPlotVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-calculatedfield.html
    pub struct CalculatedField_ {
        pub data_set_identifier: crate::value::ExpString,
        pub expression: crate::value::ExpString,
        pub name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CalculatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CalculatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CalculatedField as CalculatedField;
    impl crate::value::ToValue for CalculatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-calculatedmeasurefield.html
    pub struct CalculatedMeasureField_ {
        pub expression: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CalculatedMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CalculatedMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CalculatedMeasureField as CalculatedMeasureField;
    impl crate::value::ToValue for CalculatedMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-cascadingcontrolconfiguration.html
    pub struct CascadingControlConfiguration_ {
        pub source_controls: Option<Vec<CascadingControlSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CascadingControlConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CascadingControlConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CascadingControlConfiguration as CascadingControlConfiguration;
    impl crate::value::ToValue for CascadingControlConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source_controls {
                properties.insert(
                    "SourceControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-cascadingcontrolsource.html
    pub struct CascadingControlSource_ {
        pub column_to_match: Option<Box<ColumnIdentifier_>>,
        pub source_sheet_control_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CascadingControlSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CascadingControlSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CascadingControlSource as CascadingControlSource;
    impl crate::value::ToValue for CascadingControlSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_to_match {
                properties.insert(
                    "ColumnToMatch".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_sheet_control_id {
                properties.insert(
                    "SourceSheetControlId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-categoricaldimensionfield.html
    pub struct CategoricalDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<StringFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CategoricalDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CategoricalDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CategoricalDimensionField as CategoricalDimensionField;
    impl crate::value::ToValue for CategoricalDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-categoricalmeasurefield.html
    pub struct CategoricalMeasureField_ {
        pub aggregation_function: Option<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<StringFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CategoricalMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CategoricalMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CategoricalMeasureField as CategoricalMeasureField;
    impl crate::value::ToValue for CategoricalMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-categorydrilldownfilter.html
    pub struct CategoryDrillDownFilter_ {
        pub category_values: Vec<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CategoryDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CategoryDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CategoryDrillDownFilter as CategoryDrillDownFilter;
    impl crate::value::ToValue for CategoryDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CategoryValues".to_string(),
                crate::value::ToValue::to_value(&self.category_values),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-categoryfilter.html
    pub struct CategoryFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub configuration: Box<CategoryFilterConfiguration_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CategoryFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CategoryFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CategoryFilter as CategoryFilter;
    impl crate::value::ToValue for CategoryFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-categoryfilterconfiguration.html
    pub struct CategoryFilterConfiguration_ {
        pub custom_filter_configuration: Option<Box<CustomFilterConfiguration_>>,
        pub custom_filter_list_configuration: Option<Box<CustomFilterListConfiguration_>>,
        pub filter_list_configuration: Option<Box<FilterListConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CategoryFilterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CategoryFilterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CategoryFilterConfiguration as CategoryFilterConfiguration;
    impl crate::value::ToValue for CategoryFilterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_filter_configuration {
                properties.insert(
                    "CustomFilterConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_filter_list_configuration {
                properties.insert(
                    "CustomFilterListConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_list_configuration {
                properties.insert(
                    "FilterListConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-categoryinnerfilter.html
    pub struct CategoryInnerFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub configuration: Box<CategoryFilterConfiguration_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CategoryInnerFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CategoryInnerFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CategoryInnerFilter as CategoryInnerFilter;
    impl crate::value::ToValue for CategoryInnerFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-chartaxislabeloptions.html
    pub struct ChartAxisLabelOptions_ {
        pub axis_label_options: Option<Vec<AxisLabelOptions_>>,
        pub sort_icon_visibility: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ChartAxisLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ChartAxisLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ChartAxisLabelOptions as ChartAxisLabelOptions;
    impl crate::value::ToValue for ChartAxisLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_label_options {
                properties.insert(
                    "AxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_icon_visibility {
                properties.insert(
                    "SortIconVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-clustermarker.html
    pub struct ClusterMarker_ {
        pub simple_cluster_marker: Option<Box<SimpleClusterMarker_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ClusterMarker {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ClusterMarker"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ClusterMarker as ClusterMarker;
    impl crate::value::ToValue for ClusterMarker_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_cluster_marker {
                properties.insert(
                    "SimpleClusterMarker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-clustermarkerconfiguration.html
    pub struct ClusterMarkerConfiguration_ {
        pub cluster_marker: Option<Box<ClusterMarker_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ClusterMarkerConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ClusterMarkerConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ClusterMarkerConfiguration as ClusterMarkerConfiguration;
    impl crate::value::ToValue for ClusterMarkerConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_marker {
                properties.insert(
                    "ClusterMarker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-colorscale.html
    pub struct ColorScale_ {
        pub color_fill_type: crate::value::ExpString,
        pub colors: Vec<DataColor_>,
        pub null_value_color: Option<Box<DataColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColorScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColorScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColorScale as ColorScale;
    impl crate::value::ToValue for ColorScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColorFillType".to_string(),
                crate::value::ToValue::to_value(&self.color_fill_type),
            );
            properties.insert(
                "Colors".to_string(),
                crate::value::ToValue::to_value(&self.colors),
            );
            if let Some(ref value) = self.null_value_color {
                properties.insert(
                    "NullValueColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-colorsconfiguration.html
    pub struct ColorsConfiguration_ {
        pub custom_colors: Option<Vec<CustomColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColorsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColorsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColorsConfiguration as ColorsConfiguration;
    impl crate::value::ToValue for ColorsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_colors {
                properties.insert(
                    "CustomColors".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-columnconfiguration.html
    pub struct ColumnConfiguration_ {
        pub colors_configuration: Option<Box<ColorsConfiguration_>>,
        pub column: Box<ColumnIdentifier_>,
        pub format_configuration: Option<Box<FormatConfiguration_>>,
        pub role: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColumnConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColumnConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColumnConfiguration as ColumnConfiguration;
    impl crate::value::ToValue for ColumnConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors_configuration {
                properties.insert(
                    "ColorsConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.role {
                properties.insert("Role".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-columnhierarchy.html
    pub struct ColumnHierarchy_ {
        pub date_time_hierarchy: Option<Box<DateTimeHierarchy_>>,
        pub explicit_hierarchy: Option<Box<ExplicitHierarchy_>>,
        pub predefined_hierarchy: Option<Box<PredefinedHierarchy_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColumnHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColumnHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColumnHierarchy as ColumnHierarchy;
    impl crate::value::ToValue for ColumnHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_hierarchy {
                properties.insert(
                    "DateTimeHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.explicit_hierarchy {
                properties.insert(
                    "ExplicitHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.predefined_hierarchy {
                properties.insert(
                    "PredefinedHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-columnidentifier.html
    pub struct ColumnIdentifier_ {
        pub column_name: crate::value::ExpString,
        pub data_set_identifier: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColumnIdentifier {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColumnIdentifier"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColumnIdentifier as ColumnIdentifier;
    impl crate::value::ToValue for ColumnIdentifier_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-columnsort.html
    pub struct ColumnSort_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub direction: crate::value::ExpString,
        pub sort_by: Box<ColumnIdentifier_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColumnSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColumnSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColumnSort as ColumnSort;
    impl crate::value::ToValue for ColumnSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "SortBy".to_string(),
                crate::value::ToValue::to_value(&self.sort_by),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-columntooltipitem.html
    pub struct ColumnTooltipItem_ {
        pub aggregation: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub label: Option<crate::value::ExpString>,
        pub tooltip_target: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ColumnTooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ColumnTooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ColumnTooltipItem as ColumnTooltipItem;
    impl crate::value::ToValue for ColumnTooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_target {
                properties.insert(
                    "TooltipTarget".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-combochartaggregatedfieldwells.html
    pub struct ComboChartAggregatedFieldWells_ {
        pub bar_values: Option<Vec<MeasureField_>>,
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub line_values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComboChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComboChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComboChartAggregatedFieldWells as ComboChartAggregatedFieldWells;
    impl crate::value::ToValue for ComboChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_values {
                properties.insert(
                    "BarValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.line_values {
                properties.insert(
                    "LineValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-combochartconfiguration.html
    pub struct ComboChartConfiguration_ {
        pub bar_data_labels: Option<Box<DataLabelOptions_>>,
        pub bars_arrangement: Option<crate::value::ExpString>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<ComboChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub line_data_labels: Option<Box<DataLabelOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub secondary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub secondary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub single_axis_options: Option<Box<SingleAxisOptions_>>,
        pub sort_configuration: Option<Box<ComboChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComboChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComboChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComboChartConfiguration as ComboChartConfiguration;
    impl crate::value::ToValue for ComboChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_data_labels {
                properties.insert(
                    "BarDataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.bars_arrangement {
                properties.insert(
                    "BarsArrangement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.line_data_labels {
                properties.insert(
                    "LineDataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_display_options {
                properties.insert(
                    "SecondaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_label_options {
                properties.insert(
                    "SecondaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.single_axis_options {
                properties.insert(
                    "SingleAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-combochartfieldwells.html
    pub struct ComboChartFieldWells_ {
        pub combo_chart_aggregated_field_wells: Option<Box<ComboChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComboChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComboChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComboChartFieldWells as ComboChartFieldWells;
    impl crate::value::ToValue for ComboChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.combo_chart_aggregated_field_wells {
                properties.insert(
                    "ComboChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-combochartsortconfiguration.html
    pub struct ComboChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComboChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComboChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComboChartSortConfiguration as ComboChartSortConfiguration;
    impl crate::value::ToValue for ComboChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-combochartvisual.html
    pub struct ComboChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<ComboChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComboChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComboChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComboChartVisual as ComboChartVisual;
    impl crate::value::ToValue for ComboChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-comparisonconfiguration.html
    pub struct ComparisonConfiguration_ {
        pub comparison_format: Option<Box<ComparisonFormatConfiguration_>>,
        pub comparison_method: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComparisonConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComparisonConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComparisonConfiguration as ComparisonConfiguration;
    impl crate::value::ToValue for ComparisonConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.comparison_format {
                properties.insert(
                    "ComparisonFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_method {
                properties.insert(
                    "ComparisonMethod".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-comparisonformatconfiguration.html
    pub struct ComparisonFormatConfiguration_ {
        pub number_display_format_configuration: Option<Box<NumberDisplayFormatConfiguration_>>,
        pub percentage_display_format_configuration:
            Option<Box<PercentageDisplayFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ComparisonFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ComparisonFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ComparisonFormatConfiguration as ComparisonFormatConfiguration;
    impl crate::value::ToValue for ComparisonFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.number_display_format_configuration {
                properties.insert(
                    "NumberDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentage_display_format_configuration {
                properties.insert(
                    "PercentageDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-computation.html
    pub struct Computation_ {
        pub forecast: Option<Box<ForecastComputation_>>,
        pub growth_rate: Option<Box<GrowthRateComputation_>>,
        pub maximum_minimum: Option<Box<MaximumMinimumComputation_>>,
        pub metric_comparison: Option<Box<MetricComparisonComputation_>>,
        pub period_over_period: Option<Box<PeriodOverPeriodComputation_>>,
        pub period_to_date: Option<Box<PeriodToDateComputation_>>,
        pub top_bottom_movers: Option<Box<TopBottomMoversComputation_>>,
        pub top_bottom_ranked: Option<Box<TopBottomRankedComputation_>>,
        pub total_aggregation: Option<Box<TotalAggregationComputation_>>,
        pub unique_values: Option<Box<UniqueValuesComputation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Computation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Computation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Computation as Computation;
    impl crate::value::ToValue for Computation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.forecast {
                properties.insert(
                    "Forecast".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.growth_rate {
                properties.insert(
                    "GrowthRate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_minimum {
                properties.insert(
                    "MaximumMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_comparison {
                properties.insert(
                    "MetricComparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.period_over_period {
                properties.insert(
                    "PeriodOverPeriod".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.period_to_date {
                properties.insert(
                    "PeriodToDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_movers {
                properties.insert(
                    "TopBottomMovers".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_ranked {
                properties.insert(
                    "TopBottomRanked".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation {
                properties.insert(
                    "TotalAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unique_values {
                properties.insert(
                    "UniqueValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingcolor.html
    pub struct ConditionalFormattingColor_ {
        pub gradient: Option<Box<ConditionalFormattingGradientColor_>>,
        pub solid: Option<Box<ConditionalFormattingSolidColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingColor as ConditionalFormattingColor;
    impl crate::value::ToValue for ConditionalFormattingColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.gradient {
                properties.insert(
                    "Gradient".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.solid {
                properties.insert("Solid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingcustomiconcondition.html
    pub struct ConditionalFormattingCustomIconCondition_ {
        pub color: Option<crate::value::ExpString>,
        pub display_configuration: Option<Box<ConditionalFormattingIconDisplayConfiguration_>>,
        pub expression: crate::value::ExpString,
        pub icon_options: Box<ConditionalFormattingCustomIconOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingCustomIconCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingCustomIconCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingCustomIconCondition as ConditionalFormattingCustomIconCondition;
    impl crate::value::ToValue for ConditionalFormattingCustomIconCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.display_configuration {
                properties.insert(
                    "DisplayConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "IconOptions".to_string(),
                crate::value::ToValue::to_value(&self.icon_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingcustomiconoptions.html
    pub struct ConditionalFormattingCustomIconOptions_ {
        pub icon: Option<crate::value::ExpString>,
        pub unicode_icon: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingCustomIconOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingCustomIconOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingCustomIconOptions as ConditionalFormattingCustomIconOptions;
    impl crate::value::ToValue for ConditionalFormattingCustomIconOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.unicode_icon {
                properties.insert(
                    "UnicodeIcon".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattinggradientcolor.html
    pub struct ConditionalFormattingGradientColor_ {
        pub color: Box<GradientColor_>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingGradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingGradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingGradientColor as ConditionalFormattingGradientColor;
    impl crate::value::ToValue for ConditionalFormattingGradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingicon.html
    pub struct ConditionalFormattingIcon_ {
        pub custom_condition: Option<Box<ConditionalFormattingCustomIconCondition_>>,
        pub icon_set: Option<Box<ConditionalFormattingIconSet_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingIcon {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingIcon"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingIcon as ConditionalFormattingIcon;
    impl crate::value::ToValue for ConditionalFormattingIcon_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_condition {
                properties.insert(
                    "CustomCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.icon_set {
                properties.insert(
                    "IconSet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingicondisplayconfiguration.html
    pub struct ConditionalFormattingIconDisplayConfiguration_ {
        pub icon_display_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingIconDisplayConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingIconDisplayConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingIconDisplayConfiguration as ConditionalFormattingIconDisplayConfiguration;
    impl crate::value::ToValue for ConditionalFormattingIconDisplayConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon_display_option {
                properties.insert(
                    "IconDisplayOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingiconset.html
    pub struct ConditionalFormattingIconSet_ {
        pub expression: crate::value::ExpString,
        pub icon_set_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingIconSet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingIconSet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingIconSet as ConditionalFormattingIconSet;
    impl crate::value::ToValue for ConditionalFormattingIconSet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            if let Some(ref value) = self.icon_set_type {
                properties.insert(
                    "IconSetType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-conditionalformattingsolidcolor.html
    pub struct ConditionalFormattingSolidColor_ {
        pub color: Option<crate::value::ExpString>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ConditionalFormattingSolidColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ConditionalFormattingSolidColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ConditionalFormattingSolidColor as ConditionalFormattingSolidColor;
    impl crate::value::ToValue for ConditionalFormattingSolidColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-contextmenuoption.html
    pub struct ContextMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ContextMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ContextMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ContextMenuOption as ContextMenuOption;
    impl crate::value::ToValue for ContextMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-contributionanalysisdefault.html
    pub struct ContributionAnalysisDefault_ {
        pub contributor_dimensions: Vec<ColumnIdentifier_>,
        pub measure_field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ContributionAnalysisDefault {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ContributionAnalysisDefault"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ContributionAnalysisDefault as ContributionAnalysisDefault;
    impl crate::value::ToValue for ContributionAnalysisDefault_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ContributorDimensions".to_string(),
                crate::value::ToValue::to_value(&self.contributor_dimensions),
            );
            properties.insert(
                "MeasureFieldId".to_string(),
                crate::value::ToValue::to_value(&self.measure_field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-currencydisplayformatconfiguration.html
    pub struct CurrencyDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub number_scale: Option<crate::value::ExpString>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
        pub symbol: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CurrencyDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CurrencyDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CurrencyDisplayFormatConfiguration as CurrencyDisplayFormatConfiguration;
    impl crate::value::ToValue for CurrencyDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_scale {
                properties.insert(
                    "NumberScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.symbol {
                properties.insert("Symbol".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customactionfilteroperation.html
    pub struct CustomActionFilterOperation_ {
        pub selected_fields_configuration: Box<FilterOperationSelectedFieldsConfiguration_>,
        pub target_visuals_configuration: Box<FilterOperationTargetVisualsConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomActionFilterOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomActionFilterOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomActionFilterOperation as CustomActionFilterOperation;
    impl crate::value::ToValue for CustomActionFilterOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "SelectedFieldsConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.selected_fields_configuration),
            );
            properties.insert(
                "TargetVisualsConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.target_visuals_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customactionnavigationoperation.html
    pub struct CustomActionNavigationOperation_ {
        pub local_navigation_configuration: Option<Box<LocalNavigationConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomActionNavigationOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomActionNavigationOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomActionNavigationOperation as CustomActionNavigationOperation;
    impl crate::value::ToValue for CustomActionNavigationOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.local_navigation_configuration {
                properties.insert(
                    "LocalNavigationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customactionsetparametersoperation.html
    pub struct CustomActionSetParametersOperation_ {
        pub parameter_value_configurations: Vec<SetParameterValueConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomActionSetParametersOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomActionSetParametersOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomActionSetParametersOperation as CustomActionSetParametersOperation;
    impl crate::value::ToValue for CustomActionSetParametersOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ParameterValueConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_configurations),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customactionurloperation.html
    pub struct CustomActionURLOperation_ {
        pub url_target: crate::value::ExpString,
        pub url_template: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomActionURLOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomActionURLOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomActionURLOperation as CustomActionURLOperation;
    impl crate::value::ToValue for CustomActionURLOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "URLTarget".to_string(),
                crate::value::ToValue::to_value(&self.url_target),
            );
            properties.insert(
                "URLTemplate".to_string(),
                crate::value::ToValue::to_value(&self.url_template),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customcolor.html
    pub struct CustomColor_ {
        pub color: crate::value::ExpString,
        pub field_value: Option<crate::value::ExpString>,
        pub special_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomColor as CustomColor;
    impl crate::value::ToValue for CustomColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.special_value {
                properties.insert(
                    "SpecialValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customcontentconfiguration.html
    pub struct CustomContentConfiguration_ {
        pub content_type: Option<crate::value::ExpString>,
        pub content_url: Option<crate::value::ExpString>,
        pub image_scaling: Option<crate::value::ExpString>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomContentConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomContentConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomContentConfiguration as CustomContentConfiguration;
    impl crate::value::ToValue for CustomContentConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content_type {
                properties.insert(
                    "ContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.content_url {
                properties.insert(
                    "ContentUrl".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.image_scaling {
                properties.insert(
                    "ImageScaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customcontentvisual.html
    pub struct CustomContentVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<CustomContentConfiguration_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomContentVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomContentVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomContentVisual as CustomContentVisual;
    impl crate::value::ToValue for CustomContentVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customfilterconfiguration.html
    pub struct CustomFilterConfiguration_ {
        pub category_value: Option<crate::value::ExpString>,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomFilterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomFilterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomFilterConfiguration as CustomFilterConfiguration;
    impl crate::value::ToValue for CustomFilterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_value {
                properties.insert(
                    "CategoryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customfilterlistconfiguration.html
    pub struct CustomFilterListConfiguration_ {
        pub category_values: Option<Vec<crate::value::ExpString>>,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomFilterListConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomFilterListConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomFilterListConfiguration as CustomFilterListConfiguration;
    impl crate::value::ToValue for CustomFilterListConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_values {
                properties.insert(
                    "CategoryValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customnarrativeoptions.html
    pub struct CustomNarrativeOptions_ {
        pub narrative: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomNarrativeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomNarrativeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomNarrativeOptions as CustomNarrativeOptions;
    impl crate::value::ToValue for CustomNarrativeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Narrative".to_string(),
                crate::value::ToValue::to_value(&self.narrative),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customparametervalues.html
    pub struct CustomParameterValues_ {
        pub date_time_values: Option<Vec<crate::value::ExpString>>,
        pub decimal_values: Option<Vec<f64>>,
        pub integer_values: Option<Vec<f64>>,
        pub string_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomParameterValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomParameterValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomParameterValues as CustomParameterValues;
    impl crate::value::ToValue for CustomParameterValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_values {
                properties.insert(
                    "DateTimeValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_values {
                properties.insert(
                    "DecimalValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_values {
                properties.insert(
                    "IntegerValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_values {
                properties.insert(
                    "StringValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-customvaluesconfiguration.html
    pub struct CustomValuesConfiguration_ {
        pub custom_values: Box<CustomParameterValues_>,
        pub include_null_value: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_CustomValuesConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.CustomValuesConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_CustomValuesConfiguration as CustomValuesConfiguration;
    impl crate::value::ToValue for CustomValuesConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomValues".to_string(),
                crate::value::ToValue::to_value(&self.custom_values),
            );
            if let Some(ref value) = self.include_null_value {
                properties.insert(
                    "IncludeNullValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-databarsoptions.html
    pub struct DataBarsOptions_ {
        pub field_id: crate::value::ExpString,
        pub negative_color: Option<crate::value::ExpString>,
        pub positive_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataBarsOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataBarsOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataBarsOptions as DataBarsOptions;
    impl crate::value::ToValue for DataBarsOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.negative_color {
                properties.insert(
                    "NegativeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.positive_color {
                properties.insert(
                    "PositiveColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datacolor.html
    pub struct DataColor_ {
        pub color: Option<crate::value::ExpString>,
        pub data_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataColor as DataColor;
    impl crate::value::ToValue for DataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_value {
                properties.insert(
                    "DataValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datafieldseriesitem.html
    pub struct DataFieldSeriesItem_ {
        pub axis_binding: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
        pub field_value: Option<crate::value::ExpString>,
        pub settings: Option<Box<LineChartSeriesSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataFieldSeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataFieldSeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataFieldSeriesItem as DataFieldSeriesItem;
    impl crate::value::ToValue for DataFieldSeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AxisBinding".to_string(),
                crate::value::ToValue::to_value(&self.axis_binding),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.settings {
                properties.insert(
                    "Settings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datalabeloptions.html
    pub struct DataLabelOptions_ {
        pub category_label_visibility: Option<crate::value::ExpString>,
        pub data_label_types: Option<Vec<DataLabelType_>>,
        pub label_color: Option<crate::value::ExpString>,
        pub label_content: Option<crate::value::ExpString>,
        pub label_font_configuration: Option<Box<FontConfiguration_>>,
        pub measure_label_visibility: Option<crate::value::ExpString>,
        pub overlap: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub totals_visibility: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataLabelOptions as DataLabelOptions;
    impl crate::value::ToValue for DataLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_visibility {
                properties.insert(
                    "CategoryLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_label_types {
                properties.insert(
                    "DataLabelTypes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_color {
                properties.insert(
                    "LabelColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_content {
                properties.insert(
                    "LabelContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_font_configuration {
                properties.insert(
                    "LabelFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_label_visibility {
                properties.insert(
                    "MeasureLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.overlap {
                properties.insert(
                    "Overlap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datalabeltype.html
    pub struct DataLabelType_ {
        pub data_path_label_type: Option<Box<DataPathLabelType_>>,
        pub field_label_type: Option<Box<FieldLabelType_>>,
        pub maximum_label_type: Option<Box<MaximumLabelType_>>,
        pub minimum_label_type: Option<Box<MinimumLabelType_>>,
        pub range_ends_label_type: Option<Box<RangeEndsLabelType_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataLabelType as DataLabelType;
    impl crate::value::ToValue for DataLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_path_label_type {
                properties.insert(
                    "DataPathLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_label_type {
                properties.insert(
                    "FieldLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_label_type {
                properties.insert(
                    "MaximumLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum_label_type {
                properties.insert(
                    "MinimumLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_ends_label_type {
                properties.insert(
                    "RangeEndsLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datapathcolor.html
    pub struct DataPathColor_ {
        pub color: crate::value::ExpString,
        pub element: Box<DataPathValue_>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataPathColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataPathColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataPathColor as DataPathColor;
    impl crate::value::ToValue for DataPathColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "Element".to_string(),
                crate::value::ToValue::to_value(&self.element),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datapathlabeltype.html
    pub struct DataPathLabelType_ {
        pub field_id: Option<crate::value::ExpString>,
        pub field_value: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataPathLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataPathLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataPathLabelType as DataPathLabelType;
    impl crate::value::ToValue for DataPathLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datapathsort.html
    pub struct DataPathSort_ {
        pub direction: crate::value::ExpString,
        pub sort_paths: Vec<DataPathValue_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataPathSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataPathSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataPathSort as DataPathSort;
    impl crate::value::ToValue for DataPathSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "SortPaths".to_string(),
                crate::value::ToValue::to_value(&self.sort_paths),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datapathtype.html
    pub struct DataPathType_ {
        pub pivot_table_data_path_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataPathType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataPathType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataPathType as DataPathType;
    impl crate::value::ToValue for DataPathType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pivot_table_data_path_type {
                properties.insert(
                    "PivotTableDataPathType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datapathvalue.html
    pub struct DataPathValue_ {
        pub data_path_type: Option<Box<DataPathType_>>,
        pub field_id: Option<crate::value::ExpString>,
        pub field_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataPathValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataPathValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataPathValue as DataPathValue;
    impl crate::value::ToValue for DataPathValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_path_type {
                properties.insert(
                    "DataPathType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datasetidentifierdeclaration.html
    pub struct DataSetIdentifierDeclaration_ {
        pub data_set_arn: crate::value::ExpString,
        pub identifier: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataSetIdentifierDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataSetIdentifierDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataSetIdentifierDeclaration as DataSetIdentifierDeclaration;
    impl crate::value::ToValue for DataSetIdentifierDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetArn".to_string(),
                crate::value::ToValue::to_value(&self.data_set_arn),
            );
            properties.insert(
                "Identifier".to_string(),
                crate::value::ToValue::to_value(&self.identifier),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datasetreference.html
    pub struct DataSetReference_ {
        pub data_set_arn: crate::value::ExpString,
        pub data_set_placeholder: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DataSetReference {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DataSetReference"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DataSetReference as DataSetReference;
    impl crate::value::ToValue for DataSetReference_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetArn".to_string(),
                crate::value::ToValue::to_value(&self.data_set_arn),
            );
            properties.insert(
                "DataSetPlaceholder".to_string(),
                crate::value::ToValue::to_value(&self.data_set_placeholder),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-dateaxisoptions.html
    pub struct DateAxisOptions_ {
        pub missing_date_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateAxisOptions as DateAxisOptions;
    impl crate::value::ToValue for DateAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.missing_date_visibility {
                properties.insert(
                    "MissingDateVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datedimensionfield.html
    pub struct DateDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub date_granularity: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateDimensionField as DateDimensionField;
    impl crate::value::ToValue for DateDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.date_granularity {
                properties.insert(
                    "DateGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datemeasurefield.html
    pub struct DateMeasureField_ {
        pub aggregation_function: Option<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateMeasureField as DateMeasureField;
    impl crate::value::ToValue for DateMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimedefaultvalues.html
    pub struct DateTimeDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimeDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimeDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimeDefaultValues as DateTimeDefaultValues;
    impl crate::value::ToValue for DateTimeDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimeformatconfiguration.html
    pub struct DateTimeFormatConfiguration_ {
        pub date_time_format: Option<crate::value::ExpString>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub numeric_format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimeFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimeFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimeFormatConfiguration as DateTimeFormatConfiguration;
    impl crate::value::ToValue for DateTimeFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_format_configuration {
                properties.insert(
                    "NumericFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimehierarchy.html
    pub struct DateTimeHierarchy_ {
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimeHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimeHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimeHierarchy as DateTimeHierarchy;
    impl crate::value::ToValue for DateTimeHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimeparameter.html
    pub struct DateTimeParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimeParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimeParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimeParameter as DateTimeParameter;
    impl crate::value::ToValue for DateTimeParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimeparameterdeclaration.html
    pub struct DateTimeParameterDeclaration_ {
        pub default_values: Option<Box<DateTimeDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value_when_unset: Option<Box<DateTimeValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimeParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimeParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimeParameterDeclaration as DateTimeParameterDeclaration;
    impl crate::value::ToValue for DateTimeParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimepickercontroldisplayoptions.html
    pub struct DateTimePickerControlDisplayOptions_ {
        pub date_icon_visibility: Option<crate::value::ExpString>,
        pub date_time_format: Option<crate::value::ExpString>,
        pub helper_text_visibility: Option<crate::value::ExpString>,
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimePickerControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimePickerControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimePickerControlDisplayOptions as DateTimePickerControlDisplayOptions;
    impl crate::value::ToValue for DateTimePickerControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_icon_visibility {
                properties.insert(
                    "DateIconVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.helper_text_visibility {
                properties.insert(
                    "HelperTextVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimevaluewhenunsetconfiguration.html
    pub struct DateTimeValueWhenUnsetConfiguration_ {
        pub custom_value: Option<crate::value::ExpString>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DateTimeValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DateTimeValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DateTimeValueWhenUnsetConfiguration as DateTimeValueWhenUnsetConfiguration;
    impl crate::value::ToValue for DateTimeValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-decimaldefaultvalues.html
    pub struct DecimalDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DecimalDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DecimalDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DecimalDefaultValues as DecimalDefaultValues;
    impl crate::value::ToValue for DecimalDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-decimalparameter.html
    pub struct DecimalParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DecimalParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DecimalParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DecimalParameter as DecimalParameter;
    impl crate::value::ToValue for DecimalParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-decimalparameterdeclaration.html
    pub struct DecimalParameterDeclaration_ {
        pub default_values: Option<Box<DecimalDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<DecimalValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DecimalParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DecimalParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DecimalParameterDeclaration as DecimalParameterDeclaration;
    impl crate::value::ToValue for DecimalParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-decimalplacesconfiguration.html
    pub struct DecimalPlacesConfiguration_ {
        pub decimal_places: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DecimalPlacesConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DecimalPlacesConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DecimalPlacesConfiguration as DecimalPlacesConfiguration;
    impl crate::value::ToValue for DecimalPlacesConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DecimalPlaces".to_string(),
                crate::value::ToValue::to_value(&self.decimal_places),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-decimalvaluewhenunsetconfiguration.html
    pub struct DecimalValueWhenUnsetConfiguration_ {
        pub custom_value: Option<f64>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DecimalValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DecimalValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DecimalValueWhenUnsetConfiguration as DecimalValueWhenUnsetConfiguration;
    impl crate::value::ToValue for DecimalValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultdatetimepickercontroloptions.html
    pub struct DefaultDateTimePickerControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultDateTimePickerControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultDateTimePickerControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultDateTimePickerControlOptions as DefaultDateTimePickerControlOptions;
    impl crate::value::ToValue for DefaultDateTimePickerControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultfiltercontrolconfiguration.html
    pub struct DefaultFilterControlConfiguration_ {
        pub control_options: Box<DefaultFilterControlOptions_>,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultFilterControlConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultFilterControlConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultFilterControlConfiguration as DefaultFilterControlConfiguration;
    impl crate::value::ToValue for DefaultFilterControlConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ControlOptions".to_string(),
                crate::value::ToValue::to_value(&self.control_options),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultfiltercontroloptions.html
    pub struct DefaultFilterControlOptions_ {
        pub default_date_time_picker_options: Option<Box<DefaultDateTimePickerControlOptions_>>,
        pub default_dropdown_options: Option<Box<DefaultFilterDropDownControlOptions_>>,
        pub default_list_options: Option<Box<DefaultFilterListControlOptions_>>,
        pub default_relative_date_time_options: Option<Box<DefaultRelativeDateTimeControlOptions_>>,
        pub default_slider_options: Option<Box<DefaultSliderControlOptions_>>,
        pub default_text_area_options: Option<Box<DefaultTextAreaControlOptions_>>,
        pub default_text_field_options: Option<Box<DefaultTextFieldControlOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultFilterControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultFilterControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultFilterControlOptions as DefaultFilterControlOptions;
    impl crate::value::ToValue for DefaultFilterControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_date_time_picker_options {
                properties.insert(
                    "DefaultDateTimePickerOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_dropdown_options {
                properties.insert(
                    "DefaultDropdownOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_list_options {
                properties.insert(
                    "DefaultListOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_relative_date_time_options {
                properties.insert(
                    "DefaultRelativeDateTimeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_slider_options {
                properties.insert(
                    "DefaultSliderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_text_area_options {
                properties.insert(
                    "DefaultTextAreaOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_text_field_options {
                properties.insert(
                    "DefaultTextFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultfilterdropdowncontroloptions.html
    pub struct DefaultFilterDropDownControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultFilterDropDownControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultFilterDropDownControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultFilterDropDownControlOptions as DefaultFilterDropDownControlOptions;
    impl crate::value::ToValue for DefaultFilterDropDownControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultfilterlistcontroloptions.html
    pub struct DefaultFilterListControlOptions_ {
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultFilterListControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultFilterListControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultFilterListControlOptions as DefaultFilterListControlOptions;
    impl crate::value::ToValue for DefaultFilterListControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultfreeformlayoutconfiguration.html
    pub struct DefaultFreeFormLayoutConfiguration_ {
        pub canvas_size_options: Box<FreeFormLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultFreeFormLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultFreeFormLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultFreeFormLayoutConfiguration as DefaultFreeFormLayoutConfiguration;
    impl crate::value::ToValue for DefaultFreeFormLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultgridlayoutconfiguration.html
    pub struct DefaultGridLayoutConfiguration_ {
        pub canvas_size_options: Box<GridLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultGridLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultGridLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultGridLayoutConfiguration as DefaultGridLayoutConfiguration;
    impl crate::value::ToValue for DefaultGridLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultinteractivelayoutconfiguration.html
    pub struct DefaultInteractiveLayoutConfiguration_ {
        pub free_form: Option<Box<DefaultFreeFormLayoutConfiguration_>>,
        pub grid: Option<Box<DefaultGridLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultInteractiveLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultInteractiveLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultInteractiveLayoutConfiguration as DefaultInteractiveLayoutConfiguration;
    impl crate::value::ToValue for DefaultInteractiveLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.free_form {
                properties.insert(
                    "FreeForm".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid {
                properties.insert("Grid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultnewsheetconfiguration.html
    pub struct DefaultNewSheetConfiguration_ {
        pub interactive_layout_configuration: Option<Box<DefaultInteractiveLayoutConfiguration_>>,
        pub paginated_layout_configuration: Option<Box<DefaultPaginatedLayoutConfiguration_>>,
        pub sheet_content_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultNewSheetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultNewSheetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultNewSheetConfiguration as DefaultNewSheetConfiguration;
    impl crate::value::ToValue for DefaultNewSheetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.interactive_layout_configuration {
                properties.insert(
                    "InteractiveLayoutConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_layout_configuration {
                properties.insert(
                    "PaginatedLayoutConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_content_type {
                properties.insert(
                    "SheetContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultpaginatedlayoutconfiguration.html
    pub struct DefaultPaginatedLayoutConfiguration_ {
        pub section_based: Option<Box<DefaultSectionBasedLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultPaginatedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultPaginatedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultPaginatedLayoutConfiguration as DefaultPaginatedLayoutConfiguration;
    impl crate::value::ToValue for DefaultPaginatedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.section_based {
                properties.insert(
                    "SectionBased".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultrelativedatetimecontroloptions.html
    pub struct DefaultRelativeDateTimeControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<RelativeDateTimeControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultRelativeDateTimeControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultRelativeDateTimeControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultRelativeDateTimeControlOptions as DefaultRelativeDateTimeControlOptions;
    impl crate::value::ToValue for DefaultRelativeDateTimeControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultsectionbasedlayoutconfiguration.html
    pub struct DefaultSectionBasedLayoutConfiguration_ {
        pub canvas_size_options: Box<SectionBasedLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultSectionBasedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultSectionBasedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultSectionBasedLayoutConfiguration as DefaultSectionBasedLayoutConfiguration;
    impl crate::value::ToValue for DefaultSectionBasedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaultslidercontroloptions.html
    pub struct DefaultSliderControlOptions_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub step_size: f64,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultSliderControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultSliderControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultSliderControlOptions as DefaultSliderControlOptions;
    impl crate::value::ToValue for DefaultSliderControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaulttextareacontroloptions.html
    pub struct DefaultTextAreaControlOptions_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultTextAreaControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultTextAreaControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultTextAreaControlOptions as DefaultTextAreaControlOptions;
    impl crate::value::ToValue for DefaultTextAreaControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-defaulttextfieldcontroloptions.html
    pub struct DefaultTextFieldControlOptions_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DefaultTextFieldControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DefaultTextFieldControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DefaultTextFieldControlOptions as DefaultTextFieldControlOptions;
    impl crate::value::ToValue for DefaultTextFieldControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-destinationparametervalueconfiguration.html
    pub struct DestinationParameterValueConfiguration_ {
        pub custom_values_configuration: Option<Box<CustomValuesConfiguration_>>,
        pub select_all_value_options: Option<crate::value::ExpString>,
        pub source_column: Option<Box<ColumnIdentifier_>>,
        pub source_field: Option<crate::value::ExpString>,
        pub source_parameter_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DestinationParameterValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DestinationParameterValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DestinationParameterValueConfiguration as DestinationParameterValueConfiguration;
    impl crate::value::ToValue for DestinationParameterValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_values_configuration {
                properties.insert(
                    "CustomValuesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_value_options {
                properties.insert(
                    "SelectAllValueOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_column {
                properties.insert(
                    "SourceColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_field {
                properties.insert(
                    "SourceField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_parameter_name {
                properties.insert(
                    "SourceParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-dimensionfield.html
    pub struct DimensionField_ {
        pub categorical_dimension_field: Option<Box<CategoricalDimensionField_>>,
        pub date_dimension_field: Option<Box<DateDimensionField_>>,
        pub numerical_dimension_field: Option<Box<NumericalDimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DimensionField as DimensionField;
    impl crate::value::ToValue for DimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.categorical_dimension_field {
                properties.insert(
                    "CategoricalDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_dimension_field {
                properties.insert(
                    "DateDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_dimension_field {
                properties.insert(
                    "NumericalDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-donutcenteroptions.html
    pub struct DonutCenterOptions_ {
        pub label_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DonutCenterOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DonutCenterOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DonutCenterOptions as DonutCenterOptions;
    impl crate::value::ToValue for DonutCenterOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_visibility {
                properties.insert(
                    "LabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-donutoptions.html
    pub struct DonutOptions_ {
        pub arc_options: Option<Box<ArcOptions_>>,
        pub donut_center_options: Option<Box<DonutCenterOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DonutOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DonutOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DonutOptions as DonutOptions;
    impl crate::value::ToValue for DonutOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_options {
                properties.insert(
                    "ArcOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.donut_center_options {
                properties.insert(
                    "DonutCenterOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-drilldownfilter.html
    pub struct DrillDownFilter_ {
        pub category_filter: Option<Box<CategoryDrillDownFilter_>>,
        pub numeric_equality_filter: Option<Box<NumericEqualityDrillDownFilter_>>,
        pub time_range_filter: Option<Box<TimeRangeDrillDownFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DrillDownFilter as DrillDownFilter;
    impl crate::value::ToValue for DrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_range_filter {
                properties.insert(
                    "TimeRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-dropdowncontroldisplayoptions.html
    pub struct DropDownControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub select_all_options: Option<Box<ListControlSelectAllOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DropDownControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DropDownControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DropDownControlDisplayOptions as DropDownControlDisplayOptions;
    impl crate::value::ToValue for DropDownControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-dynamicdefaultvalue.html
    pub struct DynamicDefaultValue_ {
        pub default_value_column: Box<ColumnIdentifier_>,
        pub group_name_column: Option<Box<ColumnIdentifier_>>,
        pub user_name_column: Option<Box<ColumnIdentifier_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_DynamicDefaultValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.DynamicDefaultValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_DynamicDefaultValue as DynamicDefaultValue;
    impl crate::value::ToValue for DynamicDefaultValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DefaultValueColumn".to_string(),
                crate::value::ToValue::to_value(&self.default_value_column),
            );
            if let Some(ref value) = self.group_name_column {
                properties.insert(
                    "GroupNameColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.user_name_column {
                properties.insert(
                    "UserNameColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-emptyvisual.html
    pub struct EmptyVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_EmptyVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.EmptyVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_EmptyVisual as EmptyVisual;
    impl crate::value::ToValue for EmptyVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-entity.html
    pub struct Entity_ {
        pub path: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Entity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Entity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Entity as Entity;
    impl crate::value::ToValue for Entity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.path {
                properties.insert("Path".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-excludeperiodconfiguration.html
    pub struct ExcludePeriodConfiguration_ {
        pub amount: f64,
        pub granularity: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ExcludePeriodConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ExcludePeriodConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ExcludePeriodConfiguration as ExcludePeriodConfiguration;
    impl crate::value::ToValue for ExcludePeriodConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Amount".to_string(),
                crate::value::ToValue::to_value(&self.amount),
            );
            properties.insert(
                "Granularity".to_string(),
                crate::value::ToValue::to_value(&self.granularity),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-explicithierarchy.html
    pub struct ExplicitHierarchy_ {
        pub columns: Vec<ColumnIdentifier_>,
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ExplicitHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ExplicitHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ExplicitHierarchy as ExplicitHierarchy;
    impl crate::value::ToValue for ExplicitHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fieldbasedtooltip.html
    pub struct FieldBasedTooltip_ {
        pub aggregation_visibility: Option<crate::value::ExpString>,
        pub tooltip_fields: Option<Vec<TooltipItem_>>,
        pub tooltip_title_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FieldBasedTooltip {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FieldBasedTooltip"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FieldBasedTooltip as FieldBasedTooltip;
    impl crate::value::ToValue for FieldBasedTooltip_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_visibility {
                properties.insert(
                    "AggregationVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_fields {
                properties.insert(
                    "TooltipFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_title_type {
                properties.insert(
                    "TooltipTitleType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fieldlabeltype.html
    pub struct FieldLabelType_ {
        pub field_id: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FieldLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FieldLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FieldLabelType as FieldLabelType;
    impl crate::value::ToValue for FieldLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fieldseriesitem.html
    pub struct FieldSeriesItem_ {
        pub axis_binding: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
        pub settings: Option<Box<LineChartSeriesSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FieldSeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FieldSeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FieldSeriesItem as FieldSeriesItem;
    impl crate::value::ToValue for FieldSeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AxisBinding".to_string(),
                crate::value::ToValue::to_value(&self.axis_binding),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.settings {
                properties.insert(
                    "Settings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fieldsort.html
    pub struct FieldSort_ {
        pub direction: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FieldSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FieldSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FieldSort as FieldSort;
    impl crate::value::ToValue for FieldSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fieldsortoptions.html
    pub struct FieldSortOptions_ {
        pub column_sort: Option<Box<ColumnSort_>>,
        pub field_sort: Option<Box<FieldSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FieldSortOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FieldSortOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FieldSortOptions as FieldSortOptions;
    impl crate::value::ToValue for FieldSortOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_sort {
                properties.insert(
                    "ColumnSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_sort {
                properties.insert(
                    "FieldSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fieldtooltipitem.html
    pub struct FieldTooltipItem_ {
        pub field_id: crate::value::ExpString,
        pub label: Option<crate::value::ExpString>,
        pub tooltip_target: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FieldTooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FieldTooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FieldTooltipItem as FieldTooltipItem;
    impl crate::value::ToValue for FieldTooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_target {
                properties.insert(
                    "TooltipTarget".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapaggregatedfieldwells.html
    pub struct FilledMapAggregatedFieldWells_ {
        pub geospatial: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapAggregatedFieldWells as FilledMapAggregatedFieldWells;
    impl crate::value::ToValue for FilledMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geospatial {
                properties.insert(
                    "Geospatial".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapconditionalformatting.html
    pub struct FilledMapConditionalFormatting_ {
        pub conditional_formatting_options: Vec<FilledMapConditionalFormattingOption_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapConditionalFormatting as FilledMapConditionalFormatting;
    impl crate::value::ToValue for FilledMapConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ConditionalFormattingOptions".to_string(),
                crate::value::ToValue::to_value(&self.conditional_formatting_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapconditionalformattingoption.html
    pub struct FilledMapConditionalFormattingOption_ {
        pub shape: Box<FilledMapShapeConditionalFormatting_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapConditionalFormattingOption as FilledMapConditionalFormattingOption;
    impl crate::value::ToValue for FilledMapConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Shape".to_string(),
                crate::value::ToValue::to_value(&self.shape),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapconfiguration.html
    pub struct FilledMapConfiguration_ {
        pub field_wells: Option<Box<FilledMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_style_options: Option<Box<GeospatialMapStyleOptions_>>,
        pub sort_configuration: Option<Box<FilledMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub window_options: Option<Box<GeospatialWindowOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapConfiguration as FilledMapConfiguration;
    impl crate::value::ToValue for FilledMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_style_options {
                properties.insert(
                    "MapStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.window_options {
                properties.insert(
                    "WindowOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapfieldwells.html
    pub struct FilledMapFieldWells_ {
        pub filled_map_aggregated_field_wells: Option<Box<FilledMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapFieldWells as FilledMapFieldWells;
    impl crate::value::ToValue for FilledMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filled_map_aggregated_field_wells {
                properties.insert(
                    "FilledMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapshapeconditionalformatting.html
    pub struct FilledMapShapeConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub format: Option<Box<ShapeConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapShapeConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapShapeConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapShapeConditionalFormatting as FilledMapShapeConditionalFormatting;
    impl crate::value::ToValue for FilledMapShapeConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format {
                properties.insert("Format".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapsortconfiguration.html
    pub struct FilledMapSortConfiguration_ {
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapSortConfiguration as FilledMapSortConfiguration;
    impl crate::value::ToValue for FilledMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filledmapvisual.html
    pub struct FilledMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<FilledMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub conditional_formatting: Option<Box<FilledMapConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilledMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilledMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilledMapVisual as FilledMapVisual;
    impl crate::value::ToValue for FilledMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filter.html
    pub struct Filter_ {
        pub category_filter: Option<Box<CategoryFilter_>>,
        pub nested_filter: Option<Box<NestedFilter_>>,
        pub numeric_equality_filter: Option<Box<NumericEqualityFilter_>>,
        pub numeric_range_filter: Option<Box<NumericRangeFilter_>>,
        pub relative_dates_filter: Option<Box<RelativeDatesFilter_>>,
        pub time_equality_filter: Option<Box<TimeEqualityFilter_>>,
        pub time_range_filter: Option<Box<TimeRangeFilter_>>,
        pub top_bottom_filter: Option<Box<TopBottomFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Filter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Filter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Filter as Filter;
    impl crate::value::ToValue for Filter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.nested_filter {
                properties.insert(
                    "NestedFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_range_filter {
                properties.insert(
                    "NumericRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_dates_filter {
                properties.insert(
                    "RelativeDatesFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_equality_filter {
                properties.insert(
                    "TimeEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_range_filter {
                properties.insert(
                    "TimeRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_filter {
                properties.insert(
                    "TopBottomFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filtercontrol.html
    pub struct FilterControl_ {
        pub cross_sheet: Option<Box<FilterCrossSheetControl_>>,
        pub date_time_picker: Option<Box<FilterDateTimePickerControl_>>,
        pub dropdown: Option<Box<FilterDropDownControl_>>,
        pub list: Option<Box<FilterListControl_>>,
        pub relative_date_time: Option<Box<FilterRelativeDateTimeControl_>>,
        pub slider: Option<Box<FilterSliderControl_>>,
        pub text_area: Option<Box<FilterTextAreaControl_>>,
        pub text_field: Option<Box<FilterTextFieldControl_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterControl as FilterControl;
    impl crate::value::ToValue for FilterControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cross_sheet {
                properties.insert(
                    "CrossSheet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_time_picker {
                properties.insert(
                    "DateTimePicker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dropdown {
                properties.insert(
                    "Dropdown".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list {
                properties.insert("List".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.relative_date_time {
                properties.insert(
                    "RelativeDateTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.slider {
                properties.insert("Slider".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_area {
                properties.insert(
                    "TextArea".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_field {
                properties.insert(
                    "TextField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filtercrosssheetcontrol.html
    pub struct FilterCrossSheetControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterCrossSheetControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterCrossSheetControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterCrossSheetControl as FilterCrossSheetControl;
    impl crate::value::ToValue for FilterCrossSheetControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterdatetimepickercontrol.html
    pub struct FilterDateTimePickerControl_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterDateTimePickerControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterDateTimePickerControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterDateTimePickerControl as FilterDateTimePickerControl;
    impl crate::value::ToValue for FilterDateTimePickerControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterdropdowncontrol.html
    pub struct FilterDropDownControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterDropDownControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterDropDownControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterDropDownControl as FilterDropDownControl;
    impl crate::value::ToValue for FilterDropDownControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filtergroup.html
    pub struct FilterGroup_ {
        pub cross_dataset: crate::value::ExpString,
        pub filter_group_id: crate::value::ExpString,
        pub filters: Vec<Filter_>,
        pub scope_configuration: Box<FilterScopeConfiguration_>,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterGroup {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterGroup"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterGroup as FilterGroup;
    impl crate::value::ToValue for FilterGroup_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CrossDataset".to_string(),
                crate::value::ToValue::to_value(&self.cross_dataset),
            );
            properties.insert(
                "FilterGroupId".to_string(),
                crate::value::ToValue::to_value(&self.filter_group_id),
            );
            properties.insert(
                "Filters".to_string(),
                crate::value::ToValue::to_value(&self.filters),
            );
            properties.insert(
                "ScopeConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.scope_configuration),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterlistconfiguration.html
    pub struct FilterListConfiguration_ {
        pub category_values: Option<Vec<crate::value::ExpString>>,
        pub match_operator: crate::value::ExpString,
        pub null_option: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterListConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterListConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterListConfiguration as FilterListConfiguration;
    impl crate::value::ToValue for FilterListConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_values {
                properties.insert(
                    "CategoryValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            if let Some(ref value) = self.null_option {
                properties.insert(
                    "NullOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterlistcontrol.html
    pub struct FilterListControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterListControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterListControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterListControl as FilterListControl;
    impl crate::value::ToValue for FilterListControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filteroperationselectedfieldsconfiguration.html
    pub struct FilterOperationSelectedFieldsConfiguration_ {
        pub selected_columns: Option<Vec<ColumnIdentifier_>>,
        pub selected_field_options: Option<crate::value::ExpString>,
        pub selected_fields: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterOperationSelectedFieldsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterOperationSelectedFieldsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterOperationSelectedFieldsConfiguration as FilterOperationSelectedFieldsConfiguration;
    impl crate::value::ToValue for FilterOperationSelectedFieldsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.selected_columns {
                properties.insert(
                    "SelectedColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_fields {
                properties.insert(
                    "SelectedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filteroperationtargetvisualsconfiguration.html
    pub struct FilterOperationTargetVisualsConfiguration_ {
        pub same_sheet_target_visual_configuration:
            Option<Box<SameSheetTargetVisualConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterOperationTargetVisualsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterOperationTargetVisualsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterOperationTargetVisualsConfiguration as FilterOperationTargetVisualsConfiguration;
    impl crate::value::ToValue for FilterOperationTargetVisualsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.same_sheet_target_visual_configuration {
                properties.insert(
                    "SameSheetTargetVisualConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterrelativedatetimecontrol.html
    pub struct FilterRelativeDateTimeControl_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<RelativeDateTimeControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterRelativeDateTimeControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterRelativeDateTimeControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterRelativeDateTimeControl as FilterRelativeDateTimeControl;
    impl crate::value::ToValue for FilterRelativeDateTimeControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterscopeconfiguration.html
    pub struct FilterScopeConfiguration_ {
        pub all_sheets: Option<serde_json::Value>,
        pub selected_sheets: Option<Box<SelectedSheetsFilterScopeConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterScopeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterScopeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterScopeConfiguration as FilterScopeConfiguration;
    impl crate::value::ToValue for FilterScopeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.all_sheets {
                properties.insert(
                    "AllSheets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_sheets {
                properties.insert(
                    "SelectedSheets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterselectablevalues.html
    pub struct FilterSelectableValues_ {
        pub values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterSelectableValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterSelectableValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterSelectableValues as FilterSelectableValues;
    impl crate::value::ToValue for FilterSelectableValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filterslidercontrol.html
    pub struct FilterSliderControl_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub source_filter_id: crate::value::ExpString,
        pub step_size: f64,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterSliderControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterSliderControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterSliderControl as FilterSliderControl;
    impl crate::value::ToValue for FilterSliderControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filtertextareacontrol.html
    pub struct FilterTextAreaControl_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterTextAreaControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterTextAreaControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterTextAreaControl as FilterTextAreaControl;
    impl crate::value::ToValue for FilterTextAreaControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-filtertextfieldcontrol.html
    pub struct FilterTextFieldControl_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FilterTextFieldControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FilterTextFieldControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FilterTextFieldControl as FilterTextFieldControl;
    impl crate::value::ToValue for FilterTextFieldControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fontconfiguration.html
    pub struct FontConfiguration_ {
        pub font_color: Option<crate::value::ExpString>,
        pub font_decoration: Option<crate::value::ExpString>,
        pub font_family: Option<crate::value::ExpString>,
        pub font_size: Option<Box<FontSize_>>,
        pub font_style: Option<crate::value::ExpString>,
        pub font_weight: Option<Box<FontWeight_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FontConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FontConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FontConfiguration as FontConfiguration;
    impl crate::value::ToValue for FontConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_color {
                properties.insert(
                    "FontColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_decoration {
                properties.insert(
                    "FontDecoration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_family {
                properties.insert(
                    "FontFamily".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_size {
                properties.insert(
                    "FontSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_style {
                properties.insert(
                    "FontStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_weight {
                properties.insert(
                    "FontWeight".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fontsize.html
    pub struct FontSize_ {
        pub absolute: Option<crate::value::ExpString>,
        pub relative: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FontSize {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FontSize"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FontSize as FontSize;
    impl crate::value::ToValue for FontSize_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.absolute {
                properties.insert(
                    "Absolute".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative {
                properties.insert(
                    "Relative".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-fontweight.html
    pub struct FontWeight_ {
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FontWeight {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FontWeight"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FontWeight as FontWeight;
    impl crate::value::ToValue for FontWeight_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-forecastcomputation.html
    pub struct ForecastComputation_ {
        pub computation_id: crate::value::ExpString,
        pub custom_seasonality_value: Option<f64>,
        pub lower_boundary: Option<f64>,
        pub name: Option<crate::value::ExpString>,
        pub periods_backward: Option<f64>,
        pub periods_forward: Option<f64>,
        pub prediction_interval: Option<f64>,
        pub seasonality: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub upper_boundary: Option<f64>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ForecastComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ForecastComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ForecastComputation as ForecastComputation;
    impl crate::value::ToValue for ForecastComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.custom_seasonality_value {
                properties.insert(
                    "CustomSeasonalityValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.lower_boundary {
                properties.insert(
                    "LowerBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.periods_backward {
                properties.insert(
                    "PeriodsBackward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_forward {
                properties.insert(
                    "PeriodsForward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prediction_interval {
                properties.insert(
                    "PredictionInterval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.seasonality {
                properties.insert(
                    "Seasonality".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.upper_boundary {
                properties.insert(
                    "UpperBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-forecastconfiguration.html
    pub struct ForecastConfiguration_ {
        pub forecast_properties: Option<Box<TimeBasedForecastProperties_>>,
        pub scenario: Option<Box<ForecastScenario_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ForecastConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ForecastConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ForecastConfiguration as ForecastConfiguration;
    impl crate::value::ToValue for ForecastConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.forecast_properties {
                properties.insert(
                    "ForecastProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scenario {
                properties.insert(
                    "Scenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-forecastscenario.html
    pub struct ForecastScenario_ {
        pub what_if_point_scenario: Option<Box<WhatIfPointScenario_>>,
        pub what_if_range_scenario: Option<Box<WhatIfRangeScenario_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ForecastScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ForecastScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ForecastScenario as ForecastScenario;
    impl crate::value::ToValue for ForecastScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.what_if_point_scenario {
                properties.insert(
                    "WhatIfPointScenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.what_if_range_scenario {
                properties.insert(
                    "WhatIfRangeScenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-formatconfiguration.html
    pub struct FormatConfiguration_ {
        pub date_time_format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
        pub number_format_configuration: Option<Box<NumberFormatConfiguration_>>,
        pub string_format_configuration: Option<Box<StringFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FormatConfiguration as FormatConfiguration;
    impl crate::value::ToValue for FormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format_configuration {
                properties.insert(
                    "DateTimeFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_format_configuration {
                properties.insert(
                    "NumberFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_format_configuration {
                properties.insert(
                    "StringFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformlayoutcanvassizeoptions.html
    pub struct FreeFormLayoutCanvasSizeOptions_ {
        pub screen_canvas_size_options: Option<Box<FreeFormLayoutScreenCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormLayoutCanvasSizeOptions as FreeFormLayoutCanvasSizeOptions;
    impl crate::value::ToValue for FreeFormLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.screen_canvas_size_options {
                properties.insert(
                    "ScreenCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformlayoutconfiguration.html
    pub struct FreeFormLayoutConfiguration_ {
        pub canvas_size_options: Option<Box<FreeFormLayoutCanvasSizeOptions_>>,
        pub elements: Vec<FreeFormLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormLayoutConfiguration as FreeFormLayoutConfiguration;
    impl crate::value::ToValue for FreeFormLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.canvas_size_options {
                properties.insert(
                    "CanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformlayoutelement.html
    pub struct FreeFormLayoutElement_ {
        pub background_style: Option<Box<FreeFormLayoutElementBackgroundStyle_>>,
        pub border_style: Option<Box<FreeFormLayoutElementBorderStyle_>>,
        pub element_id: crate::value::ExpString,
        pub element_type: crate::value::ExpString,
        pub height: crate::value::ExpString,
        pub loading_animation: Option<Box<LoadingAnimation_>>,
        pub rendering_rules: Option<Vec<SheetElementRenderingRule_>>,
        pub selected_border_style: Option<Box<FreeFormLayoutElementBorderStyle_>>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: crate::value::ExpString,
        pub x_axis_location: crate::value::ExpString,
        pub y_axis_location: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormLayoutElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormLayoutElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormLayoutElement as FreeFormLayoutElement;
    impl crate::value::ToValue for FreeFormLayoutElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_style {
                properties.insert(
                    "BackgroundStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ElementId".to_string(),
                crate::value::ToValue::to_value(&self.element_id),
            );
            properties.insert(
                "ElementType".to_string(),
                crate::value::ToValue::to_value(&self.element_type),
            );
            properties.insert(
                "Height".to_string(),
                crate::value::ToValue::to_value(&self.height),
            );
            if let Some(ref value) = self.loading_animation {
                properties.insert(
                    "LoadingAnimation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rendering_rules {
                properties.insert(
                    "RenderingRules".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_border_style {
                properties.insert(
                    "SelectedBorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Width".to_string(),
                crate::value::ToValue::to_value(&self.width),
            );
            properties.insert(
                "XAxisLocation".to_string(),
                crate::value::ToValue::to_value(&self.x_axis_location),
            );
            properties.insert(
                "YAxisLocation".to_string(),
                crate::value::ToValue::to_value(&self.y_axis_location),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformlayoutelementbackgroundstyle.html
    pub struct FreeFormLayoutElementBackgroundStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormLayoutElementBackgroundStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormLayoutElementBackgroundStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormLayoutElementBackgroundStyle as FreeFormLayoutElementBackgroundStyle;
    impl crate::value::ToValue for FreeFormLayoutElementBackgroundStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformlayoutelementborderstyle.html
    pub struct FreeFormLayoutElementBorderStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormLayoutElementBorderStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormLayoutElementBorderStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormLayoutElementBorderStyle as FreeFormLayoutElementBorderStyle;
    impl crate::value::ToValue for FreeFormLayoutElementBorderStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformlayoutscreencanvassizeoptions.html
    pub struct FreeFormLayoutScreenCanvasSizeOptions_ {
        pub optimized_view_port_width: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormLayoutScreenCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormLayoutScreenCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormLayoutScreenCanvasSizeOptions as FreeFormLayoutScreenCanvasSizeOptions;
    impl crate::value::ToValue for FreeFormLayoutScreenCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "OptimizedViewPortWidth".to_string(),
                crate::value::ToValue::to_value(&self.optimized_view_port_width),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-freeformsectionlayoutconfiguration.html
    pub struct FreeFormSectionLayoutConfiguration_ {
        pub elements: Vec<FreeFormLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FreeFormSectionLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FreeFormSectionLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FreeFormSectionLayoutConfiguration as FreeFormSectionLayoutConfiguration;
    impl crate::value::ToValue for FreeFormSectionLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-funnelchartaggregatedfieldwells.html
    pub struct FunnelChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FunnelChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FunnelChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FunnelChartAggregatedFieldWells as FunnelChartAggregatedFieldWells;
    impl crate::value::ToValue for FunnelChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-funnelchartconfiguration.html
    pub struct FunnelChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub data_label_options: Option<Box<FunnelChartDataLabelOptions_>>,
        pub field_wells: Option<Box<FunnelChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<FunnelChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FunnelChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FunnelChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FunnelChartConfiguration as FunnelChartConfiguration;
    impl crate::value::ToValue for FunnelChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_label_options {
                properties.insert(
                    "DataLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-funnelchartdatalabeloptions.html
    pub struct FunnelChartDataLabelOptions_ {
        pub category_label_visibility: Option<crate::value::ExpString>,
        pub label_color: Option<crate::value::ExpString>,
        pub label_font_configuration: Option<Box<FontConfiguration_>>,
        pub measure_data_label_style: Option<crate::value::ExpString>,
        pub measure_label_visibility: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FunnelChartDataLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FunnelChartDataLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FunnelChartDataLabelOptions as FunnelChartDataLabelOptions;
    impl crate::value::ToValue for FunnelChartDataLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_visibility {
                properties.insert(
                    "CategoryLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_color {
                properties.insert(
                    "LabelColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_font_configuration {
                properties.insert(
                    "LabelFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_data_label_style {
                properties.insert(
                    "MeasureDataLabelStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_label_visibility {
                properties.insert(
                    "MeasureLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-funnelchartfieldwells.html
    pub struct FunnelChartFieldWells_ {
        pub funnel_chart_aggregated_field_wells: Option<Box<FunnelChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FunnelChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FunnelChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FunnelChartFieldWells as FunnelChartFieldWells;
    impl crate::value::ToValue for FunnelChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.funnel_chart_aggregated_field_wells {
                properties.insert(
                    "FunnelChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-funnelchartsortconfiguration.html
    pub struct FunnelChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FunnelChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FunnelChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FunnelChartSortConfiguration as FunnelChartSortConfiguration;
    impl crate::value::ToValue for FunnelChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-funnelchartvisual.html
    pub struct FunnelChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<FunnelChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_FunnelChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.FunnelChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_FunnelChartVisual as FunnelChartVisual;
    impl crate::value::ToValue for FunnelChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartarcconditionalformatting.html
    pub struct GaugeChartArcConditionalFormatting_ {
        pub foreground_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartArcConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartArcConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartArcConditionalFormatting as GaugeChartArcConditionalFormatting;
    impl crate::value::ToValue for GaugeChartArcConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartcolorconfiguration.html
    pub struct GaugeChartColorConfiguration_ {
        pub background_color: Option<crate::value::ExpString>,
        pub foreground_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartColorConfiguration as GaugeChartColorConfiguration;
    impl crate::value::ToValue for GaugeChartColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartconditionalformatting.html
    pub struct GaugeChartConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<GaugeChartConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartConditionalFormatting as GaugeChartConditionalFormatting;
    impl crate::value::ToValue for GaugeChartConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartconditionalformattingoption.html
    pub struct GaugeChartConditionalFormattingOption_ {
        pub arc: Option<Box<GaugeChartArcConditionalFormatting_>>,
        pub primary_value: Option<Box<GaugeChartPrimaryValueConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartConditionalFormattingOption as GaugeChartConditionalFormattingOption;
    impl crate::value::ToValue for GaugeChartConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc {
                properties.insert("Arc".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_value {
                properties.insert(
                    "PrimaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartconfiguration.html
    pub struct GaugeChartConfiguration_ {
        pub color_configuration: Option<Box<GaugeChartColorConfiguration_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<GaugeChartFieldWells_>>,
        pub gauge_chart_options: Option<Box<GaugeChartOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub tooltip_options: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartConfiguration as GaugeChartConfiguration;
    impl crate::value::ToValue for GaugeChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_configuration {
                properties.insert(
                    "ColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gauge_chart_options {
                properties.insert(
                    "GaugeChartOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_options {
                properties.insert(
                    "TooltipOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartfieldwells.html
    pub struct GaugeChartFieldWells_ {
        pub target_values: Option<Vec<MeasureField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartFieldWells as GaugeChartFieldWells;
    impl crate::value::ToValue for GaugeChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_values {
                properties.insert(
                    "TargetValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartoptions.html
    pub struct GaugeChartOptions_ {
        pub arc: Option<Box<ArcConfiguration_>>,
        pub arc_axis: Option<Box<ArcAxisConfiguration_>>,
        pub comparison: Option<Box<ComparisonConfiguration_>>,
        pub primary_value_display_type: Option<crate::value::ExpString>,
        pub primary_value_font_configuration: Option<Box<FontConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartOptions as GaugeChartOptions;
    impl crate::value::ToValue for GaugeChartOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc {
                properties.insert("Arc".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.arc_axis {
                properties.insert(
                    "ArcAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison {
                properties.insert(
                    "Comparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_display_type {
                properties.insert(
                    "PrimaryValueDisplayType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_font_configuration {
                properties.insert(
                    "PrimaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartprimaryvalueconditionalformatting.html
    pub struct GaugeChartPrimaryValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartPrimaryValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartPrimaryValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartPrimaryValueConditionalFormatting as GaugeChartPrimaryValueConditionalFormatting;
    impl crate::value::ToValue for GaugeChartPrimaryValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gaugechartvisual.html
    pub struct GaugeChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<GaugeChartConfiguration_>>,
        pub conditional_formatting: Option<Box<GaugeChartConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GaugeChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GaugeChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GaugeChartVisual as GaugeChartVisual;
    impl crate::value::ToValue for GaugeChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialcategoricalcolor.html
    pub struct GeospatialCategoricalColor_ {
        pub category_data_colors: Vec<GeospatialCategoricalDataColor_>,
        pub default_opacity: Option<f64>,
        pub null_data_settings: Option<Box<GeospatialNullDataSettings_>>,
        pub null_data_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialCategoricalColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialCategoricalColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialCategoricalColor as GeospatialCategoricalColor;
    impl crate::value::ToValue for GeospatialCategoricalColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CategoryDataColors".to_string(),
                crate::value::ToValue::to_value(&self.category_data_colors),
            );
            if let Some(ref value) = self.default_opacity {
                properties.insert(
                    "DefaultOpacity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_settings {
                properties.insert(
                    "NullDataSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_visibility {
                properties.insert(
                    "NullDataVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialcategoricaldatacolor.html
    pub struct GeospatialCategoricalDataColor_ {
        pub color: crate::value::ExpString,
        pub data_value: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialCategoricalDataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialCategoricalDataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialCategoricalDataColor as GeospatialCategoricalDataColor;
    impl crate::value::ToValue for GeospatialCategoricalDataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "DataValue".to_string(),
                crate::value::ToValue::to_value(&self.data_value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialcircleradius.html
    pub struct GeospatialCircleRadius_ {
        pub radius: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialCircleRadius {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialCircleRadius"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialCircleRadius as GeospatialCircleRadius;
    impl crate::value::ToValue for GeospatialCircleRadius_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.radius {
                properties.insert("Radius".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialcirclesymbolstyle.html
    pub struct GeospatialCircleSymbolStyle_ {
        pub circle_radius: Option<Box<GeospatialCircleRadius_>>,
        pub fill_color: Option<Box<GeospatialColor_>>,
        pub stroke_color: Option<Box<GeospatialColor_>>,
        pub stroke_width: Option<Box<GeospatialLineWidth_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialCircleSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialCircleSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialCircleSymbolStyle as GeospatialCircleSymbolStyle;
    impl crate::value::ToValue for GeospatialCircleSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.circle_radius {
                properties.insert(
                    "CircleRadius".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_color {
                properties.insert(
                    "StrokeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_width {
                properties.insert(
                    "StrokeWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialcolor.html
    pub struct GeospatialColor_ {
        pub categorical: Option<Box<GeospatialCategoricalColor_>>,
        pub gradient: Option<Box<GeospatialGradientColor_>>,
        pub solid: Option<Box<GeospatialSolidColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialColor as GeospatialColor;
    impl crate::value::ToValue for GeospatialColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.categorical {
                properties.insert(
                    "Categorical".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gradient {
                properties.insert(
                    "Gradient".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.solid {
                properties.insert("Solid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialcoordinatebounds.html
    pub struct GeospatialCoordinateBounds_ {
        pub east: f64,
        pub north: f64,
        pub south: f64,
        pub west: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialCoordinateBounds {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialCoordinateBounds"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialCoordinateBounds as GeospatialCoordinateBounds;
    impl crate::value::ToValue for GeospatialCoordinateBounds_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "East".to_string(),
                crate::value::ToValue::to_value(&self.east),
            );
            properties.insert(
                "North".to_string(),
                crate::value::ToValue::to_value(&self.north),
            );
            properties.insert(
                "South".to_string(),
                crate::value::ToValue::to_value(&self.south),
            );
            properties.insert(
                "West".to_string(),
                crate::value::ToValue::to_value(&self.west),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialdatasourceitem.html
    pub struct GeospatialDataSourceItem_ {
        pub static_file_data_source: Option<Box<GeospatialStaticFileSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialDataSourceItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialDataSourceItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialDataSourceItem as GeospatialDataSourceItem;
    impl crate::value::ToValue for GeospatialDataSourceItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_file_data_source {
                properties.insert(
                    "StaticFileDataSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialgradientcolor.html
    pub struct GeospatialGradientColor_ {
        pub default_opacity: Option<f64>,
        pub null_data_settings: Option<Box<GeospatialNullDataSettings_>>,
        pub null_data_visibility: Option<crate::value::ExpString>,
        pub step_colors: Vec<GeospatialGradientStepColor_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialGradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialGradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialGradientColor as GeospatialGradientColor;
    impl crate::value::ToValue for GeospatialGradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_opacity {
                properties.insert(
                    "DefaultOpacity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_settings {
                properties.insert(
                    "NullDataSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_visibility {
                properties.insert(
                    "NullDataVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "StepColors".to_string(),
                crate::value::ToValue::to_value(&self.step_colors),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialgradientstepcolor.html
    pub struct GeospatialGradientStepColor_ {
        pub color: crate::value::ExpString,
        pub data_value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialGradientStepColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialGradientStepColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialGradientStepColor as GeospatialGradientStepColor;
    impl crate::value::ToValue for GeospatialGradientStepColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "DataValue".to_string(),
                crate::value::ToValue::to_value(&self.data_value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialheatmapcolorscale.html
    pub struct GeospatialHeatmapColorScale_ {
        pub colors: Option<Vec<GeospatialHeatmapDataColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialHeatmapColorScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialHeatmapColorScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialHeatmapColorScale as GeospatialHeatmapColorScale;
    impl crate::value::ToValue for GeospatialHeatmapColorScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialheatmapconfiguration.html
    pub struct GeospatialHeatmapConfiguration_ {
        pub heatmap_color: Option<Box<GeospatialHeatmapColorScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialHeatmapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialHeatmapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialHeatmapConfiguration as GeospatialHeatmapConfiguration;
    impl crate::value::ToValue for GeospatialHeatmapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heatmap_color {
                properties.insert(
                    "HeatmapColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialheatmapdatacolor.html
    pub struct GeospatialHeatmapDataColor_ {
        pub color: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialHeatmapDataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialHeatmapDataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialHeatmapDataColor as GeospatialHeatmapDataColor;
    impl crate::value::ToValue for GeospatialHeatmapDataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallayercolorfield.html
    pub struct GeospatialLayerColorField_ {
        pub color_dimensions_fields: Option<Vec<DimensionField_>>,
        pub color_values_fields: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLayerColorField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLayerColorField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLayerColorField as GeospatialLayerColorField;
    impl crate::value::ToValue for GeospatialLayerColorField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_dimensions_fields {
                properties.insert(
                    "ColorDimensionsFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_values_fields {
                properties.insert(
                    "ColorValuesFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallayerdefinition.html
    pub struct GeospatialLayerDefinition_ {
        pub line_layer: Option<Box<GeospatialLineLayer_>>,
        pub point_layer: Option<Box<GeospatialPointLayer_>>,
        pub polygon_layer: Option<Box<GeospatialPolygonLayer_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLayerDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLayerDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLayerDefinition as GeospatialLayerDefinition;
    impl crate::value::ToValue for GeospatialLayerDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_layer {
                properties.insert(
                    "LineLayer".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.point_layer {
                properties.insert(
                    "PointLayer".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.polygon_layer {
                properties.insert(
                    "PolygonLayer".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallayeritem.html
    pub struct GeospatialLayerItem_ {
        pub actions: Option<Vec<LayerCustomAction_>>,
        pub data_source: Option<Box<GeospatialDataSourceItem_>>,
        pub join_definition: Option<Box<GeospatialLayerJoinDefinition_>>,
        pub label: Option<crate::value::ExpString>,
        pub layer_definition: Option<Box<GeospatialLayerDefinition_>>,
        pub layer_id: crate::value::ExpString,
        pub layer_type: Option<crate::value::ExpString>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLayerItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLayerItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLayerItem as GeospatialLayerItem;
    impl crate::value::ToValue for GeospatialLayerItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_source {
                properties.insert(
                    "DataSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.join_definition {
                properties.insert(
                    "JoinDefinition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.layer_definition {
                properties.insert(
                    "LayerDefinition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "LayerId".to_string(),
                crate::value::ToValue::to_value(&self.layer_id),
            );
            if let Some(ref value) = self.layer_type {
                properties.insert(
                    "LayerType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallayerjoindefinition.html
    pub struct GeospatialLayerJoinDefinition_ {
        pub color_field: Option<Box<GeospatialLayerColorField_>>,
        pub dataset_key_field: Option<Box<UnaggregatedField_>>,
        pub shape_key_field: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLayerJoinDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLayerJoinDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLayerJoinDefinition as GeospatialLayerJoinDefinition;
    impl crate::value::ToValue for GeospatialLayerJoinDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_field {
                properties.insert(
                    "ColorField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dataset_key_field {
                properties.insert(
                    "DatasetKeyField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.shape_key_field {
                properties.insert(
                    "ShapeKeyField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallayermapconfiguration.html
    pub struct GeospatialLayerMapConfiguration_ {
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_layers: Option<Vec<GeospatialLayerItem_>>,
        pub map_state: Option<Box<GeospatialMapState_>>,
        pub map_style: Option<Box<GeospatialMapStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLayerMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLayerMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLayerMapConfiguration as GeospatialLayerMapConfiguration;
    impl crate::value::ToValue for GeospatialLayerMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_layers {
                properties.insert(
                    "MapLayers".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.map_state {
                properties.insert(
                    "MapState".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.map_style {
                properties.insert(
                    "MapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallinelayer.html
    pub struct GeospatialLineLayer_ {
        pub style: Box<GeospatialLineStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLineLayer {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLineLayer"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLineLayer as GeospatialLineLayer;
    impl crate::value::ToValue for GeospatialLineLayer_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Style".to_string(),
                crate::value::ToValue::to_value(&self.style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallinestyle.html
    pub struct GeospatialLineStyle_ {
        pub line_symbol_style: Option<Box<GeospatialLineSymbolStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLineStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLineStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLineStyle as GeospatialLineStyle;
    impl crate::value::ToValue for GeospatialLineStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_symbol_style {
                properties.insert(
                    "LineSymbolStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallinesymbolstyle.html
    pub struct GeospatialLineSymbolStyle_ {
        pub fill_color: Option<Box<GeospatialColor_>>,
        pub line_width: Option<Box<GeospatialLineWidth_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLineSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLineSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLineSymbolStyle as GeospatialLineSymbolStyle;
    impl crate::value::ToValue for GeospatialLineSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatiallinewidth.html
    pub struct GeospatialLineWidth_ {
        pub line_width: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialLineWidth {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialLineWidth"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialLineWidth as GeospatialLineWidth;
    impl crate::value::ToValue for GeospatialLineWidth_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapaggregatedfieldwells.html
    pub struct GeospatialMapAggregatedFieldWells_ {
        pub colors: Option<Vec<DimensionField_>>,
        pub geospatial: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapAggregatedFieldWells as GeospatialMapAggregatedFieldWells;
    impl crate::value::ToValue for GeospatialMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.geospatial {
                properties.insert(
                    "Geospatial".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapconfiguration.html
    pub struct GeospatialMapConfiguration_ {
        pub field_wells: Option<Box<GeospatialMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_style_options: Option<Box<GeospatialMapStyleOptions_>>,
        pub point_style_options: Option<Box<GeospatialPointStyleOptions_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub window_options: Option<Box<GeospatialWindowOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapConfiguration as GeospatialMapConfiguration;
    impl crate::value::ToValue for GeospatialMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_style_options {
                properties.insert(
                    "MapStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.point_style_options {
                properties.insert(
                    "PointStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.window_options {
                properties.insert(
                    "WindowOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapfieldwells.html
    pub struct GeospatialMapFieldWells_ {
        pub geospatial_map_aggregated_field_wells: Option<Box<GeospatialMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapFieldWells as GeospatialMapFieldWells;
    impl crate::value::ToValue for GeospatialMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geospatial_map_aggregated_field_wells {
                properties.insert(
                    "GeospatialMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapstate.html
    pub struct GeospatialMapState_ {
        pub bounds: Option<Box<GeospatialCoordinateBounds_>>,
        pub map_navigation: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapState {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapState"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapState as GeospatialMapState;
    impl crate::value::ToValue for GeospatialMapState_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bounds {
                properties.insert("Bounds".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_navigation {
                properties.insert(
                    "MapNavigation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapstyle.html
    pub struct GeospatialMapStyle_ {
        pub background_color: Option<crate::value::ExpString>,
        pub base_map_style: Option<crate::value::ExpString>,
        pub base_map_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapStyle as GeospatialMapStyle;
    impl crate::value::ToValue for GeospatialMapStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_map_style {
                properties.insert(
                    "BaseMapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_map_visibility {
                properties.insert(
                    "BaseMapVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapstyleoptions.html
    pub struct GeospatialMapStyleOptions_ {
        pub base_map_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapStyleOptions as GeospatialMapStyleOptions;
    impl crate::value::ToValue for GeospatialMapStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.base_map_style {
                properties.insert(
                    "BaseMapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialmapvisual.html
    pub struct GeospatialMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<GeospatialMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialMapVisual as GeospatialMapVisual;
    impl crate::value::ToValue for GeospatialMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialnulldatasettings.html
    pub struct GeospatialNullDataSettings_ {
        pub symbol_style: Box<GeospatialNullSymbolStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialNullDataSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialNullDataSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialNullDataSettings as GeospatialNullDataSettings;
    impl crate::value::ToValue for GeospatialNullDataSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "SymbolStyle".to_string(),
                crate::value::ToValue::to_value(&self.symbol_style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialnullsymbolstyle.html
    pub struct GeospatialNullSymbolStyle_ {
        pub fill_color: Option<crate::value::ExpString>,
        pub stroke_color: Option<crate::value::ExpString>,
        pub stroke_width: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialNullSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialNullSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialNullSymbolStyle as GeospatialNullSymbolStyle;
    impl crate::value::ToValue for GeospatialNullSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_color {
                properties.insert(
                    "StrokeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_width {
                properties.insert(
                    "StrokeWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialpointlayer.html
    pub struct GeospatialPointLayer_ {
        pub style: Box<GeospatialPointStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialPointLayer {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialPointLayer"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialPointLayer as GeospatialPointLayer;
    impl crate::value::ToValue for GeospatialPointLayer_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Style".to_string(),
                crate::value::ToValue::to_value(&self.style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialpointstyle.html
    pub struct GeospatialPointStyle_ {
        pub circle_symbol_style: Option<Box<GeospatialCircleSymbolStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialPointStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialPointStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialPointStyle as GeospatialPointStyle;
    impl crate::value::ToValue for GeospatialPointStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.circle_symbol_style {
                properties.insert(
                    "CircleSymbolStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialpointstyleoptions.html
    pub struct GeospatialPointStyleOptions_ {
        pub cluster_marker_configuration: Option<Box<ClusterMarkerConfiguration_>>,
        pub heatmap_configuration: Option<Box<GeospatialHeatmapConfiguration_>>,
        pub selected_point_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialPointStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialPointStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialPointStyleOptions as GeospatialPointStyleOptions;
    impl crate::value::ToValue for GeospatialPointStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_marker_configuration {
                properties.insert(
                    "ClusterMarkerConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heatmap_configuration {
                properties.insert(
                    "HeatmapConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_point_style {
                properties.insert(
                    "SelectedPointStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialpolygonlayer.html
    pub struct GeospatialPolygonLayer_ {
        pub style: Box<GeospatialPolygonStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialPolygonLayer {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialPolygonLayer"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialPolygonLayer as GeospatialPolygonLayer;
    impl crate::value::ToValue for GeospatialPolygonLayer_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Style".to_string(),
                crate::value::ToValue::to_value(&self.style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialpolygonstyle.html
    pub struct GeospatialPolygonStyle_ {
        pub polygon_symbol_style: Option<Box<GeospatialPolygonSymbolStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialPolygonStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialPolygonStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialPolygonStyle as GeospatialPolygonStyle;
    impl crate::value::ToValue for GeospatialPolygonStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.polygon_symbol_style {
                properties.insert(
                    "PolygonSymbolStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialpolygonsymbolstyle.html
    pub struct GeospatialPolygonSymbolStyle_ {
        pub fill_color: Option<Box<GeospatialColor_>>,
        pub stroke_color: Option<Box<GeospatialColor_>>,
        pub stroke_width: Option<Box<GeospatialLineWidth_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialPolygonSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialPolygonSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialPolygonSymbolStyle as GeospatialPolygonSymbolStyle;
    impl crate::value::ToValue for GeospatialPolygonSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_color {
                properties.insert(
                    "StrokeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_width {
                properties.insert(
                    "StrokeWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialsolidcolor.html
    pub struct GeospatialSolidColor_ {
        pub color: crate::value::ExpString,
        pub state: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialSolidColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialSolidColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialSolidColor as GeospatialSolidColor;
    impl crate::value::ToValue for GeospatialSolidColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            if let Some(ref value) = self.state {
                properties.insert("State".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialstaticfilesource.html
    pub struct GeospatialStaticFileSource_ {
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialStaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialStaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialStaticFileSource as GeospatialStaticFileSource;
    impl crate::value::ToValue for GeospatialStaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-geospatialwindowoptions.html
    pub struct GeospatialWindowOptions_ {
        pub bounds: Option<Box<GeospatialCoordinateBounds_>>,
        pub map_zoom_mode: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GeospatialWindowOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GeospatialWindowOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GeospatialWindowOptions as GeospatialWindowOptions;
    impl crate::value::ToValue for GeospatialWindowOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bounds {
                properties.insert("Bounds".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_zoom_mode {
                properties.insert(
                    "MapZoomMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-globaltableborderoptions.html
    pub struct GlobalTableBorderOptions_ {
        pub side_specific_border: Option<Box<TableSideBorderOptions_>>,
        pub uniform_border: Option<Box<TableBorderOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GlobalTableBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GlobalTableBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GlobalTableBorderOptions as GlobalTableBorderOptions;
    impl crate::value::ToValue for GlobalTableBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.side_specific_border {
                properties.insert(
                    "SideSpecificBorder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.uniform_border {
                properties.insert(
                    "UniformBorder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gradientcolor.html
    pub struct GradientColor_ {
        pub stops: Option<Vec<GradientStop_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GradientColor as GradientColor;
    impl crate::value::ToValue for GradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.stops {
                properties.insert("Stops".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gradientstop.html
    pub struct GradientStop_ {
        pub color: Option<crate::value::ExpString>,
        pub data_value: Option<f64>,
        pub gradient_offset: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GradientStop {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GradientStop"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GradientStop as GradientStop;
    impl crate::value::ToValue for GradientStop_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_value {
                properties.insert(
                    "DataValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "GradientOffset".to_string(),
                crate::value::ToValue::to_value(&self.gradient_offset),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gridlayoutcanvassizeoptions.html
    pub struct GridLayoutCanvasSizeOptions_ {
        pub screen_canvas_size_options: Option<Box<GridLayoutScreenCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GridLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GridLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GridLayoutCanvasSizeOptions as GridLayoutCanvasSizeOptions;
    impl crate::value::ToValue for GridLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.screen_canvas_size_options {
                properties.insert(
                    "ScreenCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gridlayoutconfiguration.html
    pub struct GridLayoutConfiguration_ {
        pub canvas_size_options: Option<Box<GridLayoutCanvasSizeOptions_>>,
        pub elements: Vec<GridLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GridLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GridLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GridLayoutConfiguration as GridLayoutConfiguration;
    impl crate::value::ToValue for GridLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.canvas_size_options {
                properties.insert(
                    "CanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gridlayoutelement.html
    pub struct GridLayoutElement_ {
        pub column_index: Option<f64>,
        pub column_span: f64,
        pub element_id: crate::value::ExpString,
        pub element_type: crate::value::ExpString,
        pub row_index: Option<f64>,
        pub row_span: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GridLayoutElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GridLayoutElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GridLayoutElement as GridLayoutElement;
    impl crate::value::ToValue for GridLayoutElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_index {
                properties.insert(
                    "ColumnIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnSpan".to_string(),
                crate::value::ToValue::to_value(&self.column_span),
            );
            properties.insert(
                "ElementId".to_string(),
                crate::value::ToValue::to_value(&self.element_id),
            );
            properties.insert(
                "ElementType".to_string(),
                crate::value::ToValue::to_value(&self.element_type),
            );
            if let Some(ref value) = self.row_index {
                properties.insert(
                    "RowIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RowSpan".to_string(),
                crate::value::ToValue::to_value(&self.row_span),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-gridlayoutscreencanvassizeoptions.html
    pub struct GridLayoutScreenCanvasSizeOptions_ {
        pub optimized_view_port_width: Option<crate::value::ExpString>,
        pub resize_option: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GridLayoutScreenCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GridLayoutScreenCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GridLayoutScreenCanvasSizeOptions as GridLayoutScreenCanvasSizeOptions;
    impl crate::value::ToValue for GridLayoutScreenCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.optimized_view_port_width {
                properties.insert(
                    "OptimizedViewPortWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ResizeOption".to_string(),
                crate::value::ToValue::to_value(&self.resize_option),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-growthratecomputation.html
    pub struct GrowthRateComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub period_size: Option<f64>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_GrowthRateComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.GrowthRateComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_GrowthRateComputation as GrowthRateComputation;
    impl crate::value::ToValue for GrowthRateComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.period_size {
                properties.insert(
                    "PeriodSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-headerfootersectionconfiguration.html
    pub struct HeaderFooterSectionConfiguration_ {
        pub layout: Box<SectionLayoutConfiguration_>,
        pub section_id: crate::value::ExpString,
        pub style: Option<Box<SectionStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HeaderFooterSectionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HeaderFooterSectionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HeaderFooterSectionConfiguration as HeaderFooterSectionConfiguration;
    impl crate::value::ToValue for HeaderFooterSectionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Layout".to_string(),
                crate::value::ToValue::to_value(&self.layout),
            );
            properties.insert(
                "SectionId".to_string(),
                crate::value::ToValue::to_value(&self.section_id),
            );
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-heatmapaggregatedfieldwells.html
    pub struct HeatMapAggregatedFieldWells_ {
        pub columns: Option<Vec<DimensionField_>>,
        pub rows: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HeatMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HeatMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HeatMapAggregatedFieldWells as HeatMapAggregatedFieldWells;
    impl crate::value::ToValue for HeatMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows {
                properties.insert("Rows".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-heatmapconfiguration.html
    pub struct HeatMapConfiguration_ {
        pub color_scale: Option<Box<ColorScale_>>,
        pub column_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<HeatMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub row_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<HeatMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HeatMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HeatMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HeatMapConfiguration as HeatMapConfiguration;
    impl crate::value::ToValue for HeatMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_scale {
                properties.insert(
                    "ColorScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_label_options {
                properties.insert(
                    "ColumnLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.row_label_options {
                properties.insert(
                    "RowLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-heatmapfieldwells.html
    pub struct HeatMapFieldWells_ {
        pub heat_map_aggregated_field_wells: Option<Box<HeatMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HeatMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HeatMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HeatMapFieldWells as HeatMapFieldWells;
    impl crate::value::ToValue for HeatMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heat_map_aggregated_field_wells {
                properties.insert(
                    "HeatMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-heatmapsortconfiguration.html
    pub struct HeatMapSortConfiguration_ {
        pub heat_map_column_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub heat_map_column_sort: Option<Vec<FieldSortOptions_>>,
        pub heat_map_row_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub heat_map_row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HeatMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HeatMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HeatMapSortConfiguration as HeatMapSortConfiguration;
    impl crate::value::ToValue for HeatMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heat_map_column_items_limit_configuration {
                properties.insert(
                    "HeatMapColumnItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_column_sort {
                properties.insert(
                    "HeatMapColumnSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_row_items_limit_configuration {
                properties.insert(
                    "HeatMapRowItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_row_sort {
                properties.insert(
                    "HeatMapRowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-heatmapvisual.html
    pub struct HeatMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<HeatMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HeatMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HeatMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HeatMapVisual as HeatMapVisual;
    impl crate::value::ToValue for HeatMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-histogramaggregatedfieldwells.html
    pub struct HistogramAggregatedFieldWells_ {
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HistogramAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HistogramAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HistogramAggregatedFieldWells as HistogramAggregatedFieldWells;
    impl crate::value::ToValue for HistogramAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-histogrambinoptions.html
    pub struct HistogramBinOptions_ {
        pub bin_count: Option<Box<BinCountOptions_>>,
        pub bin_width: Option<Box<BinWidthOptions_>>,
        pub selected_bin_type: Option<crate::value::ExpString>,
        pub start_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HistogramBinOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HistogramBinOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HistogramBinOptions as HistogramBinOptions;
    impl crate::value::ToValue for HistogramBinOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_count {
                properties.insert(
                    "BinCount".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.bin_width {
                properties.insert(
                    "BinWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_bin_type {
                properties.insert(
                    "SelectedBinType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_value {
                properties.insert(
                    "StartValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-histogramconfiguration.html
    pub struct HistogramConfiguration_ {
        pub bin_options: Option<Box<HistogramBinOptions_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<HistogramFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HistogramConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HistogramConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HistogramConfiguration as HistogramConfiguration;
    impl crate::value::ToValue for HistogramConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_options {
                properties.insert(
                    "BinOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_display_options {
                properties.insert(
                    "YAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-histogramfieldwells.html
    pub struct HistogramFieldWells_ {
        pub histogram_aggregated_field_wells: Option<Box<HistogramAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HistogramFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HistogramFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HistogramFieldWells as HistogramFieldWells;
    impl crate::value::ToValue for HistogramFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.histogram_aggregated_field_wells {
                properties.insert(
                    "HistogramAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-histogramvisual.html
    pub struct HistogramVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<HistogramConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_HistogramVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.HistogramVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_HistogramVisual as HistogramVisual;
    impl crate::value::ToValue for HistogramVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-imagecustomaction.html
    pub struct ImageCustomAction_ {
        pub action_operations: Vec<ImageCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ImageCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ImageCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ImageCustomAction as ImageCustomAction;
    impl crate::value::ToValue for ImageCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-imagecustomactionoperation.html
    pub struct ImageCustomActionOperation_ {
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ImageCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ImageCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ImageCustomActionOperation as ImageCustomActionOperation;
    impl crate::value::ToValue for ImageCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-imageinteractionoptions.html
    pub struct ImageInteractionOptions_ {
        pub image_menu_option: Option<Box<ImageMenuOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ImageInteractionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ImageInteractionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ImageInteractionOptions as ImageInteractionOptions;
    impl crate::value::ToValue for ImageInteractionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_menu_option {
                properties.insert(
                    "ImageMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-imagemenuoption.html
    pub struct ImageMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ImageMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ImageMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ImageMenuOption as ImageMenuOption;
    impl crate::value::ToValue for ImageMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-imagestaticfile.html
    pub struct ImageStaticFile_ {
        pub source: Option<Box<StaticFileSource_>>,
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ImageStaticFile {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ImageStaticFile"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ImageStaticFile as ImageStaticFile;
    impl crate::value::ToValue for ImageStaticFile_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-innerfilter.html
    pub struct InnerFilter_ {
        pub category_inner_filter: Option<Box<CategoryInnerFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_InnerFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.InnerFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_InnerFilter as InnerFilter;
    impl crate::value::ToValue for InnerFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_inner_filter {
                properties.insert(
                    "CategoryInnerFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-insightconfiguration.html
    pub struct InsightConfiguration_ {
        pub computations: Option<Vec<Computation_>>,
        pub custom_narrative: Option<Box<CustomNarrativeOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_InsightConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.InsightConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_InsightConfiguration as InsightConfiguration;
    impl crate::value::ToValue for InsightConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.computations {
                properties.insert(
                    "Computations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_narrative {
                properties.insert(
                    "CustomNarrative".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-insightvisual.html
    pub struct InsightVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub insight_configuration: Option<Box<InsightConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_InsightVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.InsightVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_InsightVisual as InsightVisual;
    impl crate::value::ToValue for InsightVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.insight_configuration {
                properties.insert(
                    "InsightConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-integerdefaultvalues.html
    pub struct IntegerDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_IntegerDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.IntegerDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_IntegerDefaultValues as IntegerDefaultValues;
    impl crate::value::ToValue for IntegerDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-integerparameter.html
    pub struct IntegerParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_IntegerParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.IntegerParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_IntegerParameter as IntegerParameter;
    impl crate::value::ToValue for IntegerParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-integerparameterdeclaration.html
    pub struct IntegerParameterDeclaration_ {
        pub default_values: Option<Box<IntegerDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<IntegerValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_IntegerParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.IntegerParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_IntegerParameterDeclaration as IntegerParameterDeclaration;
    impl crate::value::ToValue for IntegerParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-integervaluewhenunsetconfiguration.html
    pub struct IntegerValueWhenUnsetConfiguration_ {
        pub custom_value: Option<f64>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_IntegerValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.IntegerValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_IntegerValueWhenUnsetConfiguration as IntegerValueWhenUnsetConfiguration;
    impl crate::value::ToValue for IntegerValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-itemslimitconfiguration.html
    pub struct ItemsLimitConfiguration_ {
        pub items_limit: Option<f64>,
        pub other_categories: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ItemsLimitConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ItemsLimitConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ItemsLimitConfiguration as ItemsLimitConfiguration;
    impl crate::value::ToValue for ItemsLimitConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit {
                properties.insert(
                    "ItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.other_categories {
                properties.insert(
                    "OtherCategories".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpiactualvalueconditionalformatting.html
    pub struct KPIActualValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIActualValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIActualValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIActualValueConditionalFormatting as KPIActualValueConditionalFormatting;
    impl crate::value::ToValue for KPIActualValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpicomparisonvalueconditionalformatting.html
    pub struct KPIComparisonValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIComparisonValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIComparisonValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIComparisonValueConditionalFormatting as KPIComparisonValueConditionalFormatting;
    impl crate::value::ToValue for KPIComparisonValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpiconditionalformatting.html
    pub struct KPIConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<KPIConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIConditionalFormatting as KPIConditionalFormatting;
    impl crate::value::ToValue for KPIConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpiconditionalformattingoption.html
    pub struct KPIConditionalFormattingOption_ {
        pub actual_value: Option<Box<KPIActualValueConditionalFormatting_>>,
        pub comparison_value: Option<Box<KPIComparisonValueConditionalFormatting_>>,
        pub primary_value: Option<Box<KPIPrimaryValueConditionalFormatting_>>,
        pub progress_bar: Option<Box<KPIProgressBarConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIConditionalFormattingOption as KPIConditionalFormattingOption;
    impl crate::value::ToValue for KPIConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actual_value {
                properties.insert(
                    "ActualValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_value {
                properties.insert(
                    "ComparisonValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value {
                properties.insert(
                    "PrimaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.progress_bar {
                properties.insert(
                    "ProgressBar".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpiconfiguration.html
    pub struct KPIConfiguration_ {
        pub field_wells: Option<Box<KPIFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub kpi_options: Option<Box<KPIOptions_>>,
        pub sort_configuration: Option<Box<KPISortConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIConfiguration as KPIConfiguration;
    impl crate::value::ToValue for KPIConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.kpi_options {
                properties.insert(
                    "KPIOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpifieldwells.html
    pub struct KPIFieldWells_ {
        pub target_values: Option<Vec<MeasureField_>>,
        pub trend_groups: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIFieldWells as KPIFieldWells;
    impl crate::value::ToValue for KPIFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_values {
                properties.insert(
                    "TargetValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trend_groups {
                properties.insert(
                    "TrendGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpioptions.html
    pub struct KPIOptions_ {
        pub comparison: Option<Box<ComparisonConfiguration_>>,
        pub primary_value_display_type: Option<crate::value::ExpString>,
        pub primary_value_font_configuration: Option<Box<FontConfiguration_>>,
        pub progress_bar: Option<Box<ProgressBarOptions_>>,
        pub secondary_value: Option<Box<SecondaryValueOptions_>>,
        pub secondary_value_font_configuration: Option<Box<FontConfiguration_>>,
        pub sparkline: Option<Box<KPISparklineOptions_>>,
        pub trend_arrows: Option<Box<TrendArrowOptions_>>,
        pub visual_layout_options: Option<Box<KPIVisualLayoutOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIOptions as KPIOptions;
    impl crate::value::ToValue for KPIOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.comparison {
                properties.insert(
                    "Comparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_display_type {
                properties.insert(
                    "PrimaryValueDisplayType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_font_configuration {
                properties.insert(
                    "PrimaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.progress_bar {
                properties.insert(
                    "ProgressBar".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_value {
                properties.insert(
                    "SecondaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_value_font_configuration {
                properties.insert(
                    "SecondaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sparkline {
                properties.insert(
                    "Sparkline".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trend_arrows {
                properties.insert(
                    "TrendArrows".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_layout_options {
                properties.insert(
                    "VisualLayoutOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpiprimaryvalueconditionalformatting.html
    pub struct KPIPrimaryValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIPrimaryValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIPrimaryValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIPrimaryValueConditionalFormatting as KPIPrimaryValueConditionalFormatting;
    impl crate::value::ToValue for KPIPrimaryValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpiprogressbarconditionalformatting.html
    pub struct KPIProgressBarConditionalFormatting_ {
        pub foreground_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIProgressBarConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIProgressBarConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIProgressBarConditionalFormatting as KPIProgressBarConditionalFormatting;
    impl crate::value::ToValue for KPIProgressBarConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpisortconfiguration.html
    pub struct KPISortConfiguration_ {
        pub trend_group_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPISortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPISortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPISortConfiguration as KPISortConfiguration;
    impl crate::value::ToValue for KPISortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.trend_group_sort {
                properties.insert(
                    "TrendGroupSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpisparklineoptions.html
    pub struct KPISparklineOptions_ {
        pub color: Option<crate::value::ExpString>,
        pub tooltip_visibility: Option<crate::value::ExpString>,
        pub r#type: crate::value::ExpString,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPISparklineOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPISparklineOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPISparklineOptions as KPISparklineOptions;
    impl crate::value::ToValue for KPISparklineOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_visibility {
                properties.insert(
                    "TooltipVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpivisual.html
    pub struct KPIVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<KPIConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub conditional_formatting: Option<Box<KPIConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIVisual as KPIVisual;
    impl crate::value::ToValue for KPIVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpivisuallayoutoptions.html
    pub struct KPIVisualLayoutOptions_ {
        pub standard_layout: Option<Box<KPIVisualStandardLayout_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIVisualLayoutOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIVisualLayoutOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIVisualLayoutOptions as KPIVisualLayoutOptions;
    impl crate::value::ToValue for KPIVisualLayoutOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.standard_layout {
                properties.insert(
                    "StandardLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-kpivisualstandardlayout.html
    pub struct KPIVisualStandardLayout_ {
        pub r#type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_KPIVisualStandardLayout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.KPIVisualStandardLayout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_KPIVisualStandardLayout as KPIVisualStandardLayout;
    impl crate::value::ToValue for KPIVisualStandardLayout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-labeloptions.html
    pub struct LabelOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LabelOptions as LabelOptions;
    impl crate::value::ToValue for LabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-layercustomaction.html
    pub struct LayerCustomAction_ {
        pub action_operations: Vec<LayerCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LayerCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LayerCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LayerCustomAction as LayerCustomAction;
    impl crate::value::ToValue for LayerCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-layercustomactionoperation.html
    pub struct LayerCustomActionOperation_ {
        pub filter_operation: Option<Box<CustomActionFilterOperation_>>,
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LayerCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LayerCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LayerCustomActionOperation as LayerCustomActionOperation;
    impl crate::value::ToValue for LayerCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filter_operation {
                properties.insert(
                    "FilterOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-layermapvisual.html
    pub struct LayerMapVisual_ {
        pub chart_configuration: Option<Box<GeospatialLayerMapConfiguration_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LayerMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LayerMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LayerMapVisual as LayerMapVisual;
    impl crate::value::ToValue for LayerMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-layout.html
    pub struct Layout_ {
        pub configuration: Box<LayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Layout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Layout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Layout as Layout;
    impl crate::value::ToValue for Layout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-layoutconfiguration.html
    pub struct LayoutConfiguration_ {
        pub free_form_layout: Option<Box<FreeFormLayoutConfiguration_>>,
        pub grid_layout: Option<Box<GridLayoutConfiguration_>>,
        pub section_based_layout: Option<Box<SectionBasedLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LayoutConfiguration as LayoutConfiguration;
    impl crate::value::ToValue for LayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.free_form_layout {
                properties.insert(
                    "FreeFormLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid_layout {
                properties.insert(
                    "GridLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.section_based_layout {
                properties.insert(
                    "SectionBasedLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-legendoptions.html
    pub struct LegendOptions_ {
        pub height: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub title: Option<Box<LabelOptions_>>,
        pub value_font_configuration: Option<Box<FontConfiguration_>>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LegendOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LegendOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LegendOptions as LegendOptions;
    impl crate::value::ToValue for LegendOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value_font_configuration {
                properties.insert(
                    "ValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartaggregatedfieldwells.html
    pub struct LineChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartAggregatedFieldWells as LineChartAggregatedFieldWells;
    impl crate::value::ToValue for LineChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartconfiguration.html
    pub struct LineChartConfiguration_ {
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub default_series_settings: Option<Box<LineChartDefaultSeriesSettings_>>,
        pub field_wells: Option<Box<LineChartFieldWells_>>,
        pub forecast_configurations: Option<Vec<ForecastConfiguration_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<LineSeriesAxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub secondary_y_axis_display_options: Option<Box<LineSeriesAxisDisplayOptions_>>,
        pub secondary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub series: Option<Vec<SeriesItem_>>,
        pub single_axis_options: Option<Box<SingleAxisOptions_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<LineChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub r#type: Option<crate::value::ExpString>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartConfiguration as LineChartConfiguration;
    impl crate::value::ToValue for LineChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_series_settings {
                properties.insert(
                    "DefaultSeriesSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.forecast_configurations {
                properties.insert(
                    "ForecastConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_display_options {
                properties.insert(
                    "SecondaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_label_options {
                properties.insert(
                    "SecondaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.series {
                properties.insert("Series".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.single_axis_options {
                properties.insert(
                    "SingleAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartdefaultseriessettings.html
    pub struct LineChartDefaultSeriesSettings_ {
        pub axis_binding: Option<crate::value::ExpString>,
        pub line_style_settings: Option<Box<LineChartLineStyleSettings_>>,
        pub marker_style_settings: Option<Box<LineChartMarkerStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartDefaultSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartDefaultSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartDefaultSeriesSettings as LineChartDefaultSeriesSettings;
    impl crate::value::ToValue for LineChartDefaultSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_binding {
                properties.insert(
                    "AxisBinding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_style_settings {
                properties.insert(
                    "LineStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_style_settings {
                properties.insert(
                    "MarkerStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartfieldwells.html
    pub struct LineChartFieldWells_ {
        pub line_chart_aggregated_field_wells: Option<Box<LineChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartFieldWells as LineChartFieldWells;
    impl crate::value::ToValue for LineChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_chart_aggregated_field_wells {
                properties.insert(
                    "LineChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartlinestylesettings.html
    pub struct LineChartLineStyleSettings_ {
        pub line_interpolation: Option<crate::value::ExpString>,
        pub line_style: Option<crate::value::ExpString>,
        pub line_visibility: Option<crate::value::ExpString>,
        pub line_width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartLineStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartLineStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartLineStyleSettings as LineChartLineStyleSettings;
    impl crate::value::ToValue for LineChartLineStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_interpolation {
                properties.insert(
                    "LineInterpolation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_style {
                properties.insert(
                    "LineStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_visibility {
                properties.insert(
                    "LineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartmarkerstylesettings.html
    pub struct LineChartMarkerStyleSettings_ {
        pub marker_color: Option<crate::value::ExpString>,
        pub marker_shape: Option<crate::value::ExpString>,
        pub marker_size: Option<crate::value::ExpString>,
        pub marker_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartMarkerStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartMarkerStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartMarkerStyleSettings as LineChartMarkerStyleSettings;
    impl crate::value::ToValue for LineChartMarkerStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.marker_color {
                properties.insert(
                    "MarkerColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_shape {
                properties.insert(
                    "MarkerShape".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_size {
                properties.insert(
                    "MarkerSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_visibility {
                properties.insert(
                    "MarkerVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartseriessettings.html
    pub struct LineChartSeriesSettings_ {
        pub line_style_settings: Option<Box<LineChartLineStyleSettings_>>,
        pub marker_style_settings: Option<Box<LineChartMarkerStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartSeriesSettings as LineChartSeriesSettings;
    impl crate::value::ToValue for LineChartSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_style_settings {
                properties.insert(
                    "LineStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_style_settings {
                properties.insert(
                    "MarkerStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartsortconfiguration.html
    pub struct LineChartSortConfiguration_ {
        pub category_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartSortConfiguration as LineChartSortConfiguration;
    impl crate::value::ToValue for LineChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit_configuration {
                properties.insert(
                    "CategoryItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit_configuration {
                properties.insert(
                    "ColorItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-linechartvisual.html
    pub struct LineChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<LineChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineChartVisual as LineChartVisual;
    impl crate::value::ToValue for LineChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-lineseriesaxisdisplayoptions.html
    pub struct LineSeriesAxisDisplayOptions_ {
        pub axis_options: Option<Box<AxisDisplayOptions_>>,
        pub missing_data_configurations: Option<Vec<MissingDataConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LineSeriesAxisDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LineSeriesAxisDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LineSeriesAxisDisplayOptions as LineSeriesAxisDisplayOptions;
    impl crate::value::ToValue for LineSeriesAxisDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_options {
                properties.insert(
                    "AxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.missing_data_configurations {
                properties.insert(
                    "MissingDataConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-listcontroldisplayoptions.html
    pub struct ListControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub search_options: Option<Box<ListControlSearchOptions_>>,
        pub select_all_options: Option<Box<ListControlSelectAllOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ListControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ListControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ListControlDisplayOptions as ListControlDisplayOptions;
    impl crate::value::ToValue for ListControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.search_options {
                properties.insert(
                    "SearchOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-listcontrolsearchoptions.html
    pub struct ListControlSearchOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ListControlSearchOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ListControlSearchOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ListControlSearchOptions as ListControlSearchOptions;
    impl crate::value::ToValue for ListControlSearchOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-listcontrolselectalloptions.html
    pub struct ListControlSelectAllOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ListControlSelectAllOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ListControlSelectAllOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ListControlSelectAllOptions as ListControlSelectAllOptions;
    impl crate::value::ToValue for ListControlSelectAllOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-loadinganimation.html
    pub struct LoadingAnimation_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LoadingAnimation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LoadingAnimation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LoadingAnimation as LoadingAnimation;
    impl crate::value::ToValue for LoadingAnimation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-localnavigationconfiguration.html
    pub struct LocalNavigationConfiguration_ {
        pub target_sheet_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LocalNavigationConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LocalNavigationConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LocalNavigationConfiguration as LocalNavigationConfiguration;
    impl crate::value::ToValue for LocalNavigationConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "TargetSheetId".to_string(),
                crate::value::ToValue::to_value(&self.target_sheet_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-longformattext.html
    pub struct LongFormatText_ {
        pub plain_text: Option<crate::value::ExpString>,
        pub rich_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_LongFormatText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.LongFormatText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_LongFormatText as LongFormatText;
    impl crate::value::ToValue for LongFormatText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rich_text {
                properties.insert(
                    "RichText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-mappeddatasetparameter.html
    pub struct MappedDataSetParameter_ {
        pub data_set_identifier: crate::value::ExpString,
        pub data_set_parameter_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MappedDataSetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MappedDataSetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MappedDataSetParameter as MappedDataSetParameter;
    impl crate::value::ToValue for MappedDataSetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "DataSetParameterName".to_string(),
                crate::value::ToValue::to_value(&self.data_set_parameter_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-maximumlabeltype.html
    pub struct MaximumLabelType_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MaximumLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MaximumLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MaximumLabelType as MaximumLabelType;
    impl crate::value::ToValue for MaximumLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-maximumminimumcomputation.html
    pub struct MaximumMinimumComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MaximumMinimumComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MaximumMinimumComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MaximumMinimumComputation as MaximumMinimumComputation;
    impl crate::value::ToValue for MaximumMinimumComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-measurefield.html
    pub struct MeasureField_ {
        pub calculated_measure_field: Option<Box<CalculatedMeasureField_>>,
        pub categorical_measure_field: Option<Box<CategoricalMeasureField_>>,
        pub date_measure_field: Option<Box<DateMeasureField_>>,
        pub numerical_measure_field: Option<Box<NumericalMeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MeasureField as MeasureField;
    impl crate::value::ToValue for MeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.calculated_measure_field {
                properties.insert(
                    "CalculatedMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categorical_measure_field {
                properties.insert(
                    "CategoricalMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_measure_field {
                properties.insert(
                    "DateMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_measure_field {
                properties.insert(
                    "NumericalMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-metriccomparisoncomputation.html
    pub struct MetricComparisonComputation_ {
        pub computation_id: crate::value::ExpString,
        pub from_value: Option<Box<MeasureField_>>,
        pub name: Option<crate::value::ExpString>,
        pub target_value: Option<Box<MeasureField_>>,
        pub time: Option<Box<DimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MetricComparisonComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MetricComparisonComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MetricComparisonComputation as MetricComparisonComputation;
    impl crate::value::ToValue for MetricComparisonComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.from_value {
                properties.insert(
                    "FromValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.target_value {
                properties.insert(
                    "TargetValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-minimumlabeltype.html
    pub struct MinimumLabelType_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MinimumLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MinimumLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MinimumLabelType as MinimumLabelType;
    impl crate::value::ToValue for MinimumLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-missingdataconfiguration.html
    pub struct MissingDataConfiguration_ {
        pub treatment_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_MissingDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.MissingDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_MissingDataConfiguration as MissingDataConfiguration;
    impl crate::value::ToValue for MissingDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.treatment_option {
                properties.insert(
                    "TreatmentOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-negativevalueconfiguration.html
    pub struct NegativeValueConfiguration_ {
        pub display_mode: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NegativeValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NegativeValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NegativeValueConfiguration as NegativeValueConfiguration;
    impl crate::value::ToValue for NegativeValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DisplayMode".to_string(),
                crate::value::ToValue::to_value(&self.display_mode),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-nestedfilter.html
    pub struct NestedFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub filter_id: crate::value::ExpString,
        pub include_inner_set: crate::value::ExpBool,
        pub inner_filter: Box<InnerFilter_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NestedFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NestedFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NestedFilter as NestedFilter;
    impl crate::value::ToValue for NestedFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.insert(
                "IncludeInnerSet".to_string(),
                crate::value::ToValue::to_value(&self.include_inner_set),
            );
            properties.insert(
                "InnerFilter".to_string(),
                crate::value::ToValue::to_value(&self.inner_filter),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-nullvalueformatconfiguration.html
    pub struct NullValueFormatConfiguration_ {
        pub null_string: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NullValueFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NullValueFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NullValueFormatConfiguration as NullValueFormatConfiguration;
    impl crate::value::ToValue for NullValueFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "NullString".to_string(),
                crate::value::ToValue::to_value(&self.null_string),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numberdisplayformatconfiguration.html
    pub struct NumberDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub number_scale: Option<crate::value::ExpString>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumberDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumberDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumberDisplayFormatConfiguration as NumberDisplayFormatConfiguration;
    impl crate::value::ToValue for NumberDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_scale {
                properties.insert(
                    "NumberScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numberformatconfiguration.html
    pub struct NumberFormatConfiguration_ {
        pub format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumberFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumberFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumberFormatConfiguration as NumberFormatConfiguration;
    impl crate::value::ToValue for NumberFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericaxisoptions.html
    pub struct NumericAxisOptions_ {
        pub range: Option<Box<AxisDisplayRange_>>,
        pub scale: Option<Box<AxisScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericAxisOptions as NumericAxisOptions;
    impl crate::value::ToValue for NumericAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.range {
                properties.insert("Range".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.scale {
                properties.insert("Scale".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericequalitydrilldownfilter.html
    pub struct NumericEqualityDrillDownFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericEqualityDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericEqualityDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericEqualityDrillDownFilter as NumericEqualityDrillDownFilter;
    impl crate::value::ToValue for NumericEqualityDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericequalityfilter.html
    pub struct NumericEqualityFilter_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericEqualityFilter as NumericEqualityFilter;
    impl crate::value::ToValue for NumericEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericformatconfiguration.html
    pub struct NumericFormatConfiguration_ {
        pub currency_display_format_configuration: Option<Box<CurrencyDisplayFormatConfiguration_>>,
        pub number_display_format_configuration: Option<Box<NumberDisplayFormatConfiguration_>>,
        pub percentage_display_format_configuration:
            Option<Box<PercentageDisplayFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericFormatConfiguration as NumericFormatConfiguration;
    impl crate::value::ToValue for NumericFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.currency_display_format_configuration {
                properties.insert(
                    "CurrencyDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_display_format_configuration {
                properties.insert(
                    "NumberDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentage_display_format_configuration {
                properties.insert(
                    "PercentageDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericrangefilter.html
    pub struct NumericRangeFilter_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub null_option: crate::value::ExpString,
        pub range_maximum: Option<Box<NumericRangeFilterValue_>>,
        pub range_minimum: Option<Box<NumericRangeFilterValue_>>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericRangeFilter as NumericRangeFilter;
    impl crate::value::ToValue for NumericRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.range_maximum {
                properties.insert(
                    "RangeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum {
                properties.insert(
                    "RangeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericrangefiltervalue.html
    pub struct NumericRangeFilterValue_ {
        pub parameter: Option<crate::value::ExpString>,
        pub static_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericRangeFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericRangeFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericRangeFilterValue as NumericRangeFilterValue;
    impl crate::value::ToValue for NumericRangeFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.parameter {
                properties.insert(
                    "Parameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericseparatorconfiguration.html
    pub struct NumericSeparatorConfiguration_ {
        pub decimal_separator: Option<crate::value::ExpString>,
        pub thousands_separator: Option<Box<ThousandSeparatorOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericSeparatorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericSeparatorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericSeparatorConfiguration as NumericSeparatorConfiguration;
    impl crate::value::ToValue for NumericSeparatorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_separator {
                properties.insert(
                    "DecimalSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.thousands_separator {
                properties.insert(
                    "ThousandsSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericalaggregationfunction.html
    pub struct NumericalAggregationFunction_ {
        pub percentile_aggregation: Option<Box<PercentileAggregation_>>,
        pub simple_numerical_aggregation: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericalAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericalAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericalAggregationFunction as NumericalAggregationFunction;
    impl crate::value::ToValue for NumericalAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percentile_aggregation {
                properties.insert(
                    "PercentileAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.simple_numerical_aggregation {
                properties.insert(
                    "SimpleNumericalAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericaldimensionfield.html
    pub struct NumericalDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<NumberFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericalDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericalDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericalDimensionField as NumericalDimensionField;
    impl crate::value::ToValue for NumericalDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-numericalmeasurefield.html
    pub struct NumericalMeasureField_ {
        pub aggregation_function: Option<Box<NumericalAggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<NumberFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_NumericalMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.NumericalMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_NumericalMeasureField as NumericalMeasureField;
    impl crate::value::ToValue for NumericalMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-paginationconfiguration.html
    pub struct PaginationConfiguration_ {
        pub page_number: f64,
        pub page_size: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PaginationConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PaginationConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PaginationConfiguration as PaginationConfiguration;
    impl crate::value::ToValue for PaginationConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "PageNumber".to_string(),
                crate::value::ToValue::to_value(&self.page_number),
            );
            properties.insert(
                "PageSize".to_string(),
                crate::value::ToValue::to_value(&self.page_size),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-panelconfiguration.html
    pub struct PanelConfiguration_ {
        pub background_color: Option<crate::value::ExpString>,
        pub background_visibility: Option<crate::value::ExpString>,
        pub border_color: Option<crate::value::ExpString>,
        pub border_style: Option<crate::value::ExpString>,
        pub border_thickness: Option<crate::value::ExpString>,
        pub border_visibility: Option<crate::value::ExpString>,
        pub gutter_spacing: Option<crate::value::ExpString>,
        pub gutter_visibility: Option<crate::value::ExpString>,
        pub title: Option<Box<PanelTitleOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PanelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PanelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PanelConfiguration as PanelConfiguration;
    impl crate::value::ToValue for PanelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.background_visibility {
                properties.insert(
                    "BackgroundVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_color {
                properties.insert(
                    "BorderColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_thickness {
                properties.insert(
                    "BorderThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_visibility {
                properties.insert(
                    "BorderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gutter_spacing {
                properties.insert(
                    "GutterSpacing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gutter_visibility {
                properties.insert(
                    "GutterVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-paneltitleoptions.html
    pub struct PanelTitleOptions_ {
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub horizontal_text_alignment: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PanelTitleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PanelTitleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PanelTitleOptions as PanelTitleOptions;
    impl crate::value::ToValue for PanelTitleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.horizontal_text_alignment {
                properties.insert(
                    "HorizontalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parametercontrol.html
    pub struct ParameterControl_ {
        pub date_time_picker: Option<Box<ParameterDateTimePickerControl_>>,
        pub dropdown: Option<Box<ParameterDropDownControl_>>,
        pub list: Option<Box<ParameterListControl_>>,
        pub slider: Option<Box<ParameterSliderControl_>>,
        pub text_area: Option<Box<ParameterTextAreaControl_>>,
        pub text_field: Option<Box<ParameterTextFieldControl_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterControl as ParameterControl;
    impl crate::value::ToValue for ParameterControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_picker {
                properties.insert(
                    "DateTimePicker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dropdown {
                properties.insert(
                    "Dropdown".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list {
                properties.insert("List".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.slider {
                properties.insert("Slider".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_area {
                properties.insert(
                    "TextArea".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_field {
                properties.insert(
                    "TextField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameterdatetimepickercontrol.html
    pub struct ParameterDateTimePickerControl_ {
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterDateTimePickerControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterDateTimePickerControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterDateTimePickerControl as ParameterDateTimePickerControl;
    impl crate::value::ToValue for ParameterDateTimePickerControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameterdeclaration.html
    pub struct ParameterDeclaration_ {
        pub date_time_parameter_declaration: Option<Box<DateTimeParameterDeclaration_>>,
        pub decimal_parameter_declaration: Option<Box<DecimalParameterDeclaration_>>,
        pub integer_parameter_declaration: Option<Box<IntegerParameterDeclaration_>>,
        pub string_parameter_declaration: Option<Box<StringParameterDeclaration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterDeclaration as ParameterDeclaration;
    impl crate::value::ToValue for ParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_parameter_declaration {
                properties.insert(
                    "DateTimeParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_parameter_declaration {
                properties.insert(
                    "DecimalParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_parameter_declaration {
                properties.insert(
                    "IntegerParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_parameter_declaration {
                properties.insert(
                    "StringParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameterdropdowncontrol.html
    pub struct ParameterDropDownControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<ParameterSelectableValues_>>,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterDropDownControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterDropDownControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterDropDownControl as ParameterDropDownControl;
    impl crate::value::ToValue for ParameterDropDownControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameterlistcontrol.html
    pub struct ParameterListControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<ParameterSelectableValues_>>,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterListControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterListControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterListControl as ParameterListControl;
    impl crate::value::ToValue for ParameterListControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameterselectablevalues.html
    pub struct ParameterSelectableValues_ {
        pub link_to_data_set_column: Option<Box<ColumnIdentifier_>>,
        pub values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterSelectableValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterSelectableValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterSelectableValues as ParameterSelectableValues;
    impl crate::value::ToValue for ParameterSelectableValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.link_to_data_set_column {
                properties.insert(
                    "LinkToDataSetColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameterslidercontrol.html
    pub struct ParameterSliderControl_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub step_size: f64,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterSliderControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterSliderControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterSliderControl as ParameterSliderControl;
    impl crate::value::ToValue for ParameterSliderControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parametertextareacontrol.html
    pub struct ParameterTextAreaControl_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterTextAreaControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterTextAreaControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterTextAreaControl as ParameterTextAreaControl;
    impl crate::value::ToValue for ParameterTextAreaControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parametertextfieldcontrol.html
    pub struct ParameterTextFieldControl_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ParameterTextFieldControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ParameterTextFieldControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ParameterTextFieldControl as ParameterTextFieldControl;
    impl crate::value::ToValue for ParameterTextFieldControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameters.html
    pub struct Parameters_ {
        pub date_time_parameters: Option<Vec<DateTimeParameter_>>,
        pub decimal_parameters: Option<Vec<DecimalParameter_>>,
        pub integer_parameters: Option<Vec<IntegerParameter_>>,
        pub string_parameters: Option<Vec<StringParameter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Parameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Parameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Parameters as Parameters;
    impl crate::value::ToValue for Parameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_parameters {
                properties.insert(
                    "DateTimeParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_parameters {
                properties.insert(
                    "DecimalParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_parameters {
                properties.insert(
                    "IntegerParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_parameters {
                properties.insert(
                    "StringParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-percentvisiblerange.html
    pub struct PercentVisibleRange_ {
        pub from: Option<f64>,
        pub to: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PercentVisibleRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PercentVisibleRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PercentVisibleRange as PercentVisibleRange;
    impl crate::value::ToValue for PercentVisibleRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.from {
                properties.insert("From".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.to {
                properties.insert("To".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-percentagedisplayformatconfiguration.html
    pub struct PercentageDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PercentageDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PercentageDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PercentageDisplayFormatConfiguration as PercentageDisplayFormatConfiguration;
    impl crate::value::ToValue for PercentageDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-percentileaggregation.html
    pub struct PercentileAggregation_ {
        pub percentile_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PercentileAggregation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PercentileAggregation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PercentileAggregation as PercentileAggregation;
    impl crate::value::ToValue for PercentileAggregation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percentile_value {
                properties.insert(
                    "PercentileValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-periodoverperiodcomputation.html
    pub struct PeriodOverPeriodComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PeriodOverPeriodComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PeriodOverPeriodComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PeriodOverPeriodComputation as PeriodOverPeriodComputation;
    impl crate::value::ToValue for PeriodOverPeriodComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-periodtodatecomputation.html
    pub struct PeriodToDateComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub period_time_granularity: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PeriodToDateComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PeriodToDateComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PeriodToDateComputation as PeriodToDateComputation;
    impl crate::value::ToValue for PeriodToDateComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.period_time_granularity {
                properties.insert(
                    "PeriodTimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-piechartaggregatedfieldwells.html
    pub struct PieChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PieChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PieChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PieChartAggregatedFieldWells as PieChartAggregatedFieldWells;
    impl crate::value::ToValue for PieChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-piechartconfiguration.html
    pub struct PieChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub donut_options: Option<Box<DonutOptions_>>,
        pub field_wells: Option<Box<PieChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<PieChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PieChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PieChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PieChartConfiguration as PieChartConfiguration;
    impl crate::value::ToValue for PieChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.donut_options {
                properties.insert(
                    "DonutOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-piechartfieldwells.html
    pub struct PieChartFieldWells_ {
        pub pie_chart_aggregated_field_wells: Option<Box<PieChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PieChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PieChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PieChartFieldWells as PieChartFieldWells;
    impl crate::value::ToValue for PieChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pie_chart_aggregated_field_wells {
                properties.insert(
                    "PieChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-piechartsortconfiguration.html
    pub struct PieChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PieChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PieChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PieChartSortConfiguration as PieChartSortConfiguration;
    impl crate::value::ToValue for PieChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-piechartvisual.html
    pub struct PieChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<PieChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PieChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PieChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PieChartVisual as PieChartVisual;
    impl crate::value::ToValue for PieChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivotfieldsortoptions.html
    pub struct PivotFieldSortOptions_ {
        pub field_id: crate::value::ExpString,
        pub sort_by: Box<PivotTableSortBy_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotFieldSortOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotFieldSortOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotFieldSortOptions as PivotFieldSortOptions;
    impl crate::value::ToValue for PivotFieldSortOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.insert(
                "SortBy".to_string(),
                crate::value::ToValue::to_value(&self.sort_by),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottableaggregatedfieldwells.html
    pub struct PivotTableAggregatedFieldWells_ {
        pub columns: Option<Vec<DimensionField_>>,
        pub rows: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableAggregatedFieldWells as PivotTableAggregatedFieldWells;
    impl crate::value::ToValue for PivotTableAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows {
                properties.insert("Rows".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablecellconditionalformatting.html
    pub struct PivotTableCellConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub scope: Option<Box<PivotTableConditionalFormattingScope_>>,
        pub scopes: Option<Vec<PivotTableConditionalFormattingScope_>>,
        pub text_format: Option<Box<TextConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableCellConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableCellConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableCellConditionalFormatting as PivotTableCellConditionalFormatting;
    impl crate::value::ToValue for PivotTableCellConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.scope {
                properties.insert("Scope".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.scopes {
                properties.insert("Scopes".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_format {
                properties.insert(
                    "TextFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottableconditionalformatting.html
    pub struct PivotTableConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<PivotTableConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableConditionalFormatting as PivotTableConditionalFormatting;
    impl crate::value::ToValue for PivotTableConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottableconditionalformattingoption.html
    pub struct PivotTableConditionalFormattingOption_ {
        pub cell: Option<Box<PivotTableCellConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableConditionalFormattingOption as PivotTableConditionalFormattingOption;
    impl crate::value::ToValue for PivotTableConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell {
                properties.insert("Cell".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottableconditionalformattingscope.html
    pub struct PivotTableConditionalFormattingScope_ {
        pub role: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableConditionalFormattingScope {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableConditionalFormattingScope"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableConditionalFormattingScope as PivotTableConditionalFormattingScope;
    impl crate::value::ToValue for PivotTableConditionalFormattingScope_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.role {
                properties.insert("Role".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottableconfiguration.html
    pub struct PivotTableConfiguration_ {
        pub field_options: Option<Box<PivotTableFieldOptions_>>,
        pub field_wells: Option<Box<PivotTableFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub paginated_report_options: Option<Box<PivotTablePaginatedReportOptions_>>,
        pub sort_configuration: Option<Box<PivotTableSortConfiguration_>>,
        pub table_options: Option<Box<PivotTableOptions_>>,
        pub total_options: Option<Box<PivotTableTotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableConfiguration as PivotTableConfiguration;
    impl crate::value::ToValue for PivotTableConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_options {
                properties.insert(
                    "FieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_report_options {
                properties.insert(
                    "PaginatedReportOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_options {
                properties.insert(
                    "TableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_options {
                properties.insert(
                    "TotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottabledatapathoption.html
    pub struct PivotTableDataPathOption_ {
        pub data_path_list: Vec<DataPathValue_>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableDataPathOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableDataPathOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableDataPathOption as PivotTableDataPathOption;
    impl crate::value::ToValue for PivotTableDataPathOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataPathList".to_string(),
                crate::value::ToValue::to_value(&self.data_path_list),
            );
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablefieldcollapsestateoption.html
    pub struct PivotTableFieldCollapseStateOption_ {
        pub state: Option<crate::value::ExpString>,
        pub target: Box<PivotTableFieldCollapseStateTarget_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableFieldCollapseStateOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableFieldCollapseStateOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableFieldCollapseStateOption as PivotTableFieldCollapseStateOption;
    impl crate::value::ToValue for PivotTableFieldCollapseStateOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.state {
                properties.insert("State".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Target".to_string(),
                crate::value::ToValue::to_value(&self.target),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablefieldcollapsestatetarget.html
    pub struct PivotTableFieldCollapseStateTarget_ {
        pub field_data_path_values: Option<Vec<DataPathValue_>>,
        pub field_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableFieldCollapseStateTarget {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableFieldCollapseStateTarget"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableFieldCollapseStateTarget as PivotTableFieldCollapseStateTarget;
    impl crate::value::ToValue for PivotTableFieldCollapseStateTarget_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_data_path_values {
                properties.insert(
                    "FieldDataPathValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablefieldoption.html
    pub struct PivotTableFieldOption_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableFieldOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableFieldOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableFieldOption as PivotTableFieldOption;
    impl crate::value::ToValue for PivotTableFieldOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablefieldoptions.html
    pub struct PivotTableFieldOptions_ {
        pub collapse_state_options: Option<Vec<PivotTableFieldCollapseStateOption_>>,
        pub data_path_options: Option<Vec<PivotTableDataPathOption_>>,
        pub selected_field_options: Option<Vec<PivotTableFieldOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableFieldOptions as PivotTableFieldOptions;
    impl crate::value::ToValue for PivotTableFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.collapse_state_options {
                properties.insert(
                    "CollapseStateOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_path_options {
                properties.insert(
                    "DataPathOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablefieldsubtotaloptions.html
    pub struct PivotTableFieldSubtotalOptions_ {
        pub field_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableFieldSubtotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableFieldSubtotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableFieldSubtotalOptions as PivotTableFieldSubtotalOptions;
    impl crate::value::ToValue for PivotTableFieldSubtotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablefieldwells.html
    pub struct PivotTableFieldWells_ {
        pub pivot_table_aggregated_field_wells: Option<Box<PivotTableAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableFieldWells as PivotTableFieldWells;
    impl crate::value::ToValue for PivotTableFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pivot_table_aggregated_field_wells {
                properties.insert(
                    "PivotTableAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottableoptions.html
    pub struct PivotTableOptions_ {
        pub cell_style: Option<Box<TableCellStyle_>>,
        pub collapsed_row_dimensions_visibility: Option<crate::value::ExpString>,
        pub column_header_style: Option<Box<TableCellStyle_>>,
        pub column_names_visibility: Option<crate::value::ExpString>,
        pub default_cell_width: Option<crate::value::ExpString>,
        pub metric_placement: Option<crate::value::ExpString>,
        pub row_alternate_color_options: Option<Box<RowAlternateColorOptions_>>,
        pub row_field_names_style: Option<Box<TableCellStyle_>>,
        pub row_header_style: Option<Box<TableCellStyle_>>,
        pub rows_label_options: Option<Box<PivotTableRowsLabelOptions_>>,
        pub rows_layout: Option<crate::value::ExpString>,
        pub single_metric_visibility: Option<crate::value::ExpString>,
        pub toggle_buttons_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableOptions as PivotTableOptions;
    impl crate::value::ToValue for PivotTableOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_style {
                properties.insert(
                    "CellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.collapsed_row_dimensions_visibility {
                properties.insert(
                    "CollapsedRowDimensionsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_header_style {
                properties.insert(
                    "ColumnHeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_names_visibility {
                properties.insert(
                    "ColumnNamesVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_cell_width {
                properties.insert(
                    "DefaultCellWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_placement {
                properties.insert(
                    "MetricPlacement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_alternate_color_options {
                properties.insert(
                    "RowAlternateColorOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_field_names_style {
                properties.insert(
                    "RowFieldNamesStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_header_style {
                properties.insert(
                    "RowHeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows_label_options {
                properties.insert(
                    "RowsLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows_layout {
                properties.insert(
                    "RowsLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.single_metric_visibility {
                properties.insert(
                    "SingleMetricVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.toggle_buttons_visibility {
                properties.insert(
                    "ToggleButtonsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablepaginatedreportoptions.html
    pub struct PivotTablePaginatedReportOptions_ {
        pub overflow_column_header_visibility: Option<crate::value::ExpString>,
        pub vertical_overflow_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTablePaginatedReportOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTablePaginatedReportOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTablePaginatedReportOptions as PivotTablePaginatedReportOptions;
    impl crate::value::ToValue for PivotTablePaginatedReportOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.overflow_column_header_visibility {
                properties.insert(
                    "OverflowColumnHeaderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_overflow_visibility {
                properties.insert(
                    "VerticalOverflowVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablerowslabeloptions.html
    pub struct PivotTableRowsLabelOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableRowsLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableRowsLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableRowsLabelOptions as PivotTableRowsLabelOptions;
    impl crate::value::ToValue for PivotTableRowsLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablesortby.html
    pub struct PivotTableSortBy_ {
        pub column: Option<Box<ColumnSort_>>,
        pub data_path: Option<Box<DataPathSort_>>,
        pub field: Option<Box<FieldSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableSortBy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableSortBy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableSortBy as PivotTableSortBy;
    impl crate::value::ToValue for PivotTableSortBy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column {
                properties.insert("Column".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_path {
                properties.insert(
                    "DataPath".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field {
                properties.insert("Field".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablesortconfiguration.html
    pub struct PivotTableSortConfiguration_ {
        pub field_sort_options: Option<Vec<PivotFieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableSortConfiguration as PivotTableSortConfiguration;
    impl crate::value::ToValue for PivotTableSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_sort_options {
                properties.insert(
                    "FieldSortOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottabletotaloptions.html
    pub struct PivotTableTotalOptions_ {
        pub column_subtotal_options: Option<Box<SubtotalOptions_>>,
        pub column_total_options: Option<Box<PivotTotalOptions_>>,
        pub row_subtotal_options: Option<Box<SubtotalOptions_>>,
        pub row_total_options: Option<Box<PivotTotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableTotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableTotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableTotalOptions as PivotTableTotalOptions;
    impl crate::value::ToValue for PivotTableTotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_subtotal_options {
                properties.insert(
                    "ColumnSubtotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_total_options {
                properties.insert(
                    "ColumnTotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_subtotal_options {
                properties.insert(
                    "RowSubtotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_total_options {
                properties.insert(
                    "RowTotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottablevisual.html
    pub struct PivotTableVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<PivotTableConfiguration_>>,
        pub conditional_formatting: Option<Box<PivotTableConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTableVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTableVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTableVisual as PivotTableVisual;
    impl crate::value::ToValue for PivotTableVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pivottotaloptions.html
    pub struct PivotTotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub metric_header_cell_style: Option<Box<TableCellStyle_>>,
        pub placement: Option<crate::value::ExpString>,
        pub scroll_status: Option<crate::value::ExpString>,
        pub total_aggregation_options: Option<Vec<TotalAggregationOption_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<crate::value::ExpString>,
        pub value_cell_style: Option<Box<TableCellStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PivotTotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PivotTotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PivotTotalOptions as PivotTotalOptions;
    impl crate::value::ToValue for PivotTotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_header_cell_style {
                properties.insert(
                    "MetricHeaderCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scroll_status {
                properties.insert(
                    "ScrollStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation_options {
                properties.insert(
                    "TotalAggregationOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_cell_style {
                properties.insert(
                    "ValueCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisual.html
    pub struct PluginVisual_ {
        pub chart_configuration: Option<Box<PluginVisualConfiguration_>>,
        pub plugin_arn: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisual as PluginVisual;
    impl crate::value::ToValue for PluginVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PluginArn".to_string(),
                crate::value::ToValue::to_value(&self.plugin_arn),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualconfiguration.html
    pub struct PluginVisualConfiguration_ {
        pub field_wells: Option<Vec<PluginVisualFieldWell_>>,
        pub sort_configuration: Option<Box<PluginVisualSortConfiguration_>>,
        pub visual_options: Option<Box<PluginVisualOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualConfiguration as PluginVisualConfiguration;
    impl crate::value::ToValue for PluginVisualConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_options {
                properties.insert(
                    "VisualOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualfieldwell.html
    pub struct PluginVisualFieldWell_ {
        pub axis_name: Option<crate::value::ExpString>,
        pub dimensions: Option<Vec<DimensionField_>>,
        pub measures: Option<Vec<MeasureField_>>,
        pub unaggregated: Option<Vec<UnaggregatedField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualFieldWell {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualFieldWell"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualFieldWell as PluginVisualFieldWell;
    impl crate::value::ToValue for PluginVisualFieldWell_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_name {
                properties.insert(
                    "AxisName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dimensions {
                properties.insert(
                    "Dimensions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measures {
                properties.insert(
                    "Measures".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unaggregated {
                properties.insert(
                    "Unaggregated".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualitemslimitconfiguration.html
    pub struct PluginVisualItemsLimitConfiguration_ {
        pub items_limit: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualItemsLimitConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualItemsLimitConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualItemsLimitConfiguration as PluginVisualItemsLimitConfiguration;
    impl crate::value::ToValue for PluginVisualItemsLimitConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit {
                properties.insert(
                    "ItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualoptions.html
    pub struct PluginVisualOptions_ {
        pub visual_properties: Option<Vec<PluginVisualProperty_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualOptions as PluginVisualOptions;
    impl crate::value::ToValue for PluginVisualOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visual_properties {
                properties.insert(
                    "VisualProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualproperty.html
    pub struct PluginVisualProperty_ {
        pub name: Option<crate::value::ExpString>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualProperty {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualProperty"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualProperty as PluginVisualProperty;
    impl crate::value::ToValue for PluginVisualProperty_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualsortconfiguration.html
    pub struct PluginVisualSortConfiguration_ {
        pub plugin_visual_table_query_sort: Option<Box<PluginVisualTableQuerySort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualSortConfiguration as PluginVisualSortConfiguration;
    impl crate::value::ToValue for PluginVisualSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plugin_visual_table_query_sort {
                properties.insert(
                    "PluginVisualTableQuerySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-pluginvisualtablequerysort.html
    pub struct PluginVisualTableQuerySort_ {
        pub items_limit_configuration: Option<Box<PluginVisualItemsLimitConfiguration_>>,
        pub row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PluginVisualTableQuerySort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PluginVisualTableQuerySort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PluginVisualTableQuerySort as PluginVisualTableQuerySort;
    impl crate::value::ToValue for PluginVisualTableQuerySort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit_configuration {
                properties.insert(
                    "ItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_sort {
                properties.insert(
                    "RowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-predefinedhierarchy.html
    pub struct PredefinedHierarchy_ {
        pub columns: Vec<ColumnIdentifier_>,
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_PredefinedHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.PredefinedHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_PredefinedHierarchy as PredefinedHierarchy;
    impl crate::value::ToValue for PredefinedHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-progressbaroptions.html
    pub struct ProgressBarOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ProgressBarOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ProgressBarOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ProgressBarOptions as ProgressBarOptions;
    impl crate::value::ToValue for ProgressBarOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-queryexecutionoptions.html
    pub struct QueryExecutionOptions_ {
        pub query_execution_mode: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_QueryExecutionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.QueryExecutionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_QueryExecutionOptions as QueryExecutionOptions;
    impl crate::value::ToValue for QueryExecutionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.query_execution_mode {
                properties.insert(
                    "QueryExecutionMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartaggregatedfieldwells.html
    pub struct RadarChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub color: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartAggregatedFieldWells as RadarChartAggregatedFieldWells;
    impl crate::value::ToValue for RadarChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartareastylesettings.html
    pub struct RadarChartAreaStyleSettings_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartAreaStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartAreaStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartAreaStyleSettings as RadarChartAreaStyleSettings;
    impl crate::value::ToValue for RadarChartAreaStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartconfiguration.html
    pub struct RadarChartConfiguration_ {
        pub alternate_band_colors_visibility: Option<crate::value::ExpString>,
        pub alternate_band_even_color: Option<crate::value::ExpString>,
        pub alternate_band_odd_color: Option<crate::value::ExpString>,
        pub axes_range_scale: Option<crate::value::ExpString>,
        pub base_series_settings: Option<Box<RadarChartSeriesSettings_>>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_axis: Option<Box<AxisDisplayOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<RadarChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub shape: Option<crate::value::ExpString>,
        pub sort_configuration: Option<Box<RadarChartSortConfiguration_>>,
        pub start_angle: Option<f64>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartConfiguration as RadarChartConfiguration;
    impl crate::value::ToValue for RadarChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alternate_band_colors_visibility {
                properties.insert(
                    "AlternateBandColorsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.alternate_band_even_color {
                properties.insert(
                    "AlternateBandEvenColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.alternate_band_odd_color {
                properties.insert(
                    "AlternateBandOddColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.axes_range_scale {
                properties.insert(
                    "AxesRangeScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_series_settings {
                properties.insert(
                    "BaseSeriesSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_axis {
                properties.insert(
                    "ColorAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.shape {
                properties.insert("Shape".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_angle {
                properties.insert(
                    "StartAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartfieldwells.html
    pub struct RadarChartFieldWells_ {
        pub radar_chart_aggregated_field_wells: Option<Box<RadarChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartFieldWells as RadarChartFieldWells;
    impl crate::value::ToValue for RadarChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.radar_chart_aggregated_field_wells {
                properties.insert(
                    "RadarChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartseriessettings.html
    pub struct RadarChartSeriesSettings_ {
        pub area_style_settings: Option<Box<RadarChartAreaStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartSeriesSettings as RadarChartSeriesSettings;
    impl crate::value::ToValue for RadarChartSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.area_style_settings {
                properties.insert(
                    "AreaStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartsortconfiguration.html
    pub struct RadarChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartSortConfiguration as RadarChartSortConfiguration;
    impl crate::value::ToValue for RadarChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-radarchartvisual.html
    pub struct RadarChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<RadarChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RadarChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RadarChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RadarChartVisual as RadarChartVisual;
    impl crate::value::ToValue for RadarChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-rangeendslabeltype.html
    pub struct RangeEndsLabelType_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RangeEndsLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RangeEndsLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RangeEndsLabelType as RangeEndsLabelType;
    impl crate::value::ToValue for RangeEndsLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referenceline.html
    pub struct ReferenceLine_ {
        pub data_configuration: Box<ReferenceLineDataConfiguration_>,
        pub label_configuration: Option<Box<ReferenceLineLabelConfiguration_>>,
        pub status: Option<crate::value::ExpString>,
        pub style_configuration: Option<Box<ReferenceLineStyleConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLine {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLine"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLine as ReferenceLine;
    impl crate::value::ToValue for ReferenceLine_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.data_configuration),
            );
            if let Some(ref value) = self.label_configuration {
                properties.insert(
                    "LabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.style_configuration {
                properties.insert(
                    "StyleConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinecustomlabelconfiguration.html
    pub struct ReferenceLineCustomLabelConfiguration_ {
        pub custom_label: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineCustomLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineCustomLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineCustomLabelConfiguration as ReferenceLineCustomLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineCustomLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomLabel".to_string(),
                crate::value::ToValue::to_value(&self.custom_label),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinedataconfiguration.html
    pub struct ReferenceLineDataConfiguration_ {
        pub axis_binding: Option<crate::value::ExpString>,
        pub dynamic_configuration: Option<Box<ReferenceLineDynamicDataConfiguration_>>,
        pub series_type: Option<crate::value::ExpString>,
        pub static_configuration: Option<Box<ReferenceLineStaticDataConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineDataConfiguration as ReferenceLineDataConfiguration;
    impl crate::value::ToValue for ReferenceLineDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_binding {
                properties.insert(
                    "AxisBinding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dynamic_configuration {
                properties.insert(
                    "DynamicConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.series_type {
                properties.insert(
                    "SeriesType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_configuration {
                properties.insert(
                    "StaticConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinedynamicdataconfiguration.html
    pub struct ReferenceLineDynamicDataConfiguration_ {
        pub calculation: Box<NumericalAggregationFunction_>,
        pub column: Box<ColumnIdentifier_>,
        pub measure_aggregation_function: Option<Box<AggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineDynamicDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineDynamicDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineDynamicDataConfiguration as ReferenceLineDynamicDataConfiguration;
    impl crate::value::ToValue for ReferenceLineDynamicDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Calculation".to_string(),
                crate::value::ToValue::to_value(&self.calculation),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.measure_aggregation_function {
                properties.insert(
                    "MeasureAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinelabelconfiguration.html
    pub struct ReferenceLineLabelConfiguration_ {
        pub custom_label_configuration: Option<Box<ReferenceLineCustomLabelConfiguration_>>,
        pub font_color: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub horizontal_position: Option<crate::value::ExpString>,
        pub value_label_configuration: Option<Box<ReferenceLineValueLabelConfiguration_>>,
        pub vertical_position: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineLabelConfiguration as ReferenceLineLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label_configuration {
                properties.insert(
                    "CustomLabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_color {
                properties.insert(
                    "FontColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.horizontal_position {
                properties.insert(
                    "HorizontalPosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_configuration {
                properties.insert(
                    "ValueLabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_position {
                properties.insert(
                    "VerticalPosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinestaticdataconfiguration.html
    pub struct ReferenceLineStaticDataConfiguration_ {
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineStaticDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineStaticDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineStaticDataConfiguration as ReferenceLineStaticDataConfiguration;
    impl crate::value::ToValue for ReferenceLineStaticDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinestyleconfiguration.html
    pub struct ReferenceLineStyleConfiguration_ {
        pub color: Option<crate::value::ExpString>,
        pub pattern: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineStyleConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineStyleConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineStyleConfiguration as ReferenceLineStyleConfiguration;
    impl crate::value::ToValue for ReferenceLineStyleConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.pattern {
                properties.insert(
                    "Pattern".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-referencelinevaluelabelconfiguration.html
    pub struct ReferenceLineValueLabelConfiguration_ {
        pub format_configuration: Option<Box<NumericFormatConfiguration_>>,
        pub relative_position: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ReferenceLineValueLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ReferenceLineValueLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ReferenceLineValueLabelConfiguration as ReferenceLineValueLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineValueLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_position {
                properties.insert(
                    "RelativePosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-relativedatetimecontroldisplayoptions.html
    pub struct RelativeDateTimeControlDisplayOptions_ {
        pub date_time_format: Option<crate::value::ExpString>,
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RelativeDateTimeControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RelativeDateTimeControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RelativeDateTimeControlDisplayOptions as RelativeDateTimeControlDisplayOptions;
    impl crate::value::ToValue for RelativeDateTimeControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-relativedatesfilter.html
    pub struct RelativeDatesFilter_ {
        pub anchor_date_configuration: Box<AnchorDateConfiguration_>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub exclude_period_configuration: Option<Box<ExcludePeriodConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub minimum_granularity: Option<crate::value::ExpString>,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub relative_date_type: crate::value::ExpString,
        pub relative_date_value: Option<f64>,
        pub time_granularity: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RelativeDatesFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RelativeDatesFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RelativeDatesFilter as RelativeDatesFilter;
    impl crate::value::ToValue for RelativeDatesFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AnchorDateConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.anchor_date_configuration),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.exclude_period_configuration {
                properties.insert(
                    "ExcludePeriodConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.minimum_granularity {
                properties.insert(
                    "MinimumGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RelativeDateType".to_string(),
                crate::value::ToValue::to_value(&self.relative_date_type),
            );
            if let Some(ref value) = self.relative_date_value {
                properties.insert(
                    "RelativeDateValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TimeGranularity".to_string(),
                crate::value::ToValue::to_value(&self.time_granularity),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-rollingdateconfiguration.html
    pub struct RollingDateConfiguration_ {
        pub data_set_identifier: Option<crate::value::ExpString>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RollingDateConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RollingDateConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RollingDateConfiguration as RollingDateConfiguration;
    impl crate::value::ToValue for RollingDateConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_set_identifier {
                properties.insert(
                    "DataSetIdentifier".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-rowalternatecoloroptions.html
    pub struct RowAlternateColorOptions_ {
        pub row_alternate_colors: Option<Vec<crate::value::ExpString>>,
        pub status: Option<crate::value::ExpString>,
        pub use_primary_background_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_RowAlternateColorOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.RowAlternateColorOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_RowAlternateColorOptions as RowAlternateColorOptions;
    impl crate::value::ToValue for RowAlternateColorOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.row_alternate_colors {
                properties.insert(
                    "RowAlternateColors".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.use_primary_background_color {
                properties.insert(
                    "UsePrimaryBackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-samesheettargetvisualconfiguration.html
    pub struct SameSheetTargetVisualConfiguration_ {
        pub target_visual_options: Option<crate::value::ExpString>,
        pub target_visuals: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SameSheetTargetVisualConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SameSheetTargetVisualConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SameSheetTargetVisualConfiguration as SameSheetTargetVisualConfiguration;
    impl crate::value::ToValue for SameSheetTargetVisualConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_visual_options {
                properties.insert(
                    "TargetVisualOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.target_visuals {
                properties.insert(
                    "TargetVisuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sankeydiagramaggregatedfieldwells.html
    pub struct SankeyDiagramAggregatedFieldWells_ {
        pub destination: Option<Vec<DimensionField_>>,
        pub source: Option<Vec<DimensionField_>>,
        pub weight: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SankeyDiagramAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SankeyDiagramAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SankeyDiagramAggregatedFieldWells as SankeyDiagramAggregatedFieldWells;
    impl crate::value::ToValue for SankeyDiagramAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.destination {
                properties.insert(
                    "Destination".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.weight {
                properties.insert("Weight".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sankeydiagramchartconfiguration.html
    pub struct SankeyDiagramChartConfiguration_ {
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<SankeyDiagramFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<SankeyDiagramSortConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SankeyDiagramChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SankeyDiagramChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SankeyDiagramChartConfiguration as SankeyDiagramChartConfiguration;
    impl crate::value::ToValue for SankeyDiagramChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sankeydiagramfieldwells.html
    pub struct SankeyDiagramFieldWells_ {
        pub sankey_diagram_aggregated_field_wells: Option<Box<SankeyDiagramAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SankeyDiagramFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SankeyDiagramFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SankeyDiagramFieldWells as SankeyDiagramFieldWells;
    impl crate::value::ToValue for SankeyDiagramFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sankey_diagram_aggregated_field_wells {
                properties.insert(
                    "SankeyDiagramAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sankeydiagramsortconfiguration.html
    pub struct SankeyDiagramSortConfiguration_ {
        pub destination_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub source_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub weight_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SankeyDiagramSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SankeyDiagramSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SankeyDiagramSortConfiguration as SankeyDiagramSortConfiguration;
    impl crate::value::ToValue for SankeyDiagramSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.destination_items_limit {
                properties.insert(
                    "DestinationItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_items_limit {
                properties.insert(
                    "SourceItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.weight_sort {
                properties.insert(
                    "WeightSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sankeydiagramvisual.html
    pub struct SankeyDiagramVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<SankeyDiagramChartConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SankeyDiagramVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SankeyDiagramVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SankeyDiagramVisual as SankeyDiagramVisual;
    impl crate::value::ToValue for SankeyDiagramVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scatterplotcategoricallyaggregatedfieldwells.html
    pub struct ScatterPlotCategoricallyAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub label: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
        pub x_axis: Option<Vec<MeasureField_>>,
        pub y_axis: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScatterPlotCategoricallyAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScatterPlotCategoricallyAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScatterPlotCategoricallyAggregatedFieldWells as ScatterPlotCategoricallyAggregatedFieldWells;
    impl crate::value::ToValue for ScatterPlotCategoricallyAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scatterplotconfiguration.html
    pub struct ScatterPlotConfiguration_ {
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<ScatterPlotFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub sort_configuration: Option<Box<ScatterPlotSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScatterPlotConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScatterPlotConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScatterPlotConfiguration as ScatterPlotConfiguration;
    impl crate::value::ToValue for ScatterPlotConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_display_options {
                properties.insert(
                    "YAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_label_options {
                properties.insert(
                    "YAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scatterplotfieldwells.html
    pub struct ScatterPlotFieldWells_ {
        pub scatter_plot_categorically_aggregated_field_wells:
            Option<Box<ScatterPlotCategoricallyAggregatedFieldWells_>>,
        pub scatter_plot_unaggregated_field_wells: Option<Box<ScatterPlotUnaggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScatterPlotFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScatterPlotFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScatterPlotFieldWells as ScatterPlotFieldWells;
    impl crate::value::ToValue for ScatterPlotFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scatter_plot_categorically_aggregated_field_wells {
                properties.insert(
                    "ScatterPlotCategoricallyAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scatter_plot_unaggregated_field_wells {
                properties.insert(
                    "ScatterPlotUnaggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scatterplotsortconfiguration.html
    pub struct ScatterPlotSortConfiguration_ {
        pub scatter_plot_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScatterPlotSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScatterPlotSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScatterPlotSortConfiguration as ScatterPlotSortConfiguration;
    impl crate::value::ToValue for ScatterPlotSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scatter_plot_limit_configuration {
                properties.insert(
                    "ScatterPlotLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scatterplotunaggregatedfieldwells.html
    pub struct ScatterPlotUnaggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub label: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
        pub x_axis: Option<Vec<DimensionField_>>,
        pub y_axis: Option<Vec<DimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScatterPlotUnaggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScatterPlotUnaggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScatterPlotUnaggregatedFieldWells as ScatterPlotUnaggregatedFieldWells;
    impl crate::value::ToValue for ScatterPlotUnaggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scatterplotvisual.html
    pub struct ScatterPlotVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<ScatterPlotConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScatterPlotVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScatterPlotVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScatterPlotVisual as ScatterPlotVisual;
    impl crate::value::ToValue for ScatterPlotVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-scrollbaroptions.html
    pub struct ScrollBarOptions_ {
        pub visibility: Option<crate::value::ExpString>,
        pub visible_range: Option<Box<VisibleRangeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ScrollBarOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ScrollBarOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ScrollBarOptions as ScrollBarOptions;
    impl crate::value::ToValue for ScrollBarOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visible_range {
                properties.insert(
                    "VisibleRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-secondaryvalueoptions.html
    pub struct SecondaryValueOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SecondaryValueOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SecondaryValueOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SecondaryValueOptions as SecondaryValueOptions;
    impl crate::value::ToValue for SecondaryValueOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionafterpagebreak.html
    pub struct SectionAfterPageBreak_ {
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionAfterPageBreak {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionAfterPageBreak"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionAfterPageBreak as SectionAfterPageBreak;
    impl crate::value::ToValue for SectionAfterPageBreak_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionbasedlayoutcanvassizeoptions.html
    pub struct SectionBasedLayoutCanvasSizeOptions_ {
        pub paper_canvas_size_options: Option<Box<SectionBasedLayoutPaperCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionBasedLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionBasedLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionBasedLayoutCanvasSizeOptions as SectionBasedLayoutCanvasSizeOptions;
    impl crate::value::ToValue for SectionBasedLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.paper_canvas_size_options {
                properties.insert(
                    "PaperCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionbasedlayoutconfiguration.html
    pub struct SectionBasedLayoutConfiguration_ {
        pub body_sections: Vec<BodySectionConfiguration_>,
        pub canvas_size_options: Box<SectionBasedLayoutCanvasSizeOptions_>,
        pub footer_sections: Vec<HeaderFooterSectionConfiguration_>,
        pub header_sections: Vec<HeaderFooterSectionConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionBasedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionBasedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionBasedLayoutConfiguration as SectionBasedLayoutConfiguration;
    impl crate::value::ToValue for SectionBasedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BodySections".to_string(),
                crate::value::ToValue::to_value(&self.body_sections),
            );
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.insert(
                "FooterSections".to_string(),
                crate::value::ToValue::to_value(&self.footer_sections),
            );
            properties.insert(
                "HeaderSections".to_string(),
                crate::value::ToValue::to_value(&self.header_sections),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionbasedlayoutpapercanvassizeoptions.html
    pub struct SectionBasedLayoutPaperCanvasSizeOptions_ {
        pub paper_margin: Option<Box<Spacing_>>,
        pub paper_orientation: Option<crate::value::ExpString>,
        pub paper_size: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionBasedLayoutPaperCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionBasedLayoutPaperCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionBasedLayoutPaperCanvasSizeOptions as SectionBasedLayoutPaperCanvasSizeOptions;
    impl crate::value::ToValue for SectionBasedLayoutPaperCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.paper_margin {
                properties.insert(
                    "PaperMargin".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paper_orientation {
                properties.insert(
                    "PaperOrientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paper_size {
                properties.insert(
                    "PaperSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionlayoutconfiguration.html
    pub struct SectionLayoutConfiguration_ {
        pub free_form_layout: Box<FreeFormSectionLayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionLayoutConfiguration as SectionLayoutConfiguration;
    impl crate::value::ToValue for SectionLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FreeFormLayout".to_string(),
                crate::value::ToValue::to_value(&self.free_form_layout),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionpagebreakconfiguration.html
    pub struct SectionPageBreakConfiguration_ {
        pub after: Option<Box<SectionAfterPageBreak_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionPageBreakConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionPageBreakConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionPageBreakConfiguration as SectionPageBreakConfiguration;
    impl crate::value::ToValue for SectionPageBreakConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.after {
                properties.insert("After".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sectionstyle.html
    pub struct SectionStyle_ {
        pub height: Option<crate::value::ExpString>,
        pub padding: Option<Box<Spacing_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SectionStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SectionStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SectionStyle as SectionStyle;
    impl crate::value::ToValue for SectionStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.padding {
                properties.insert(
                    "Padding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-selectedsheetsfilterscopeconfiguration.html
    pub struct SelectedSheetsFilterScopeConfiguration_ {
        pub sheet_visual_scoping_configurations: Option<Vec<SheetVisualScopingConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SelectedSheetsFilterScopeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SelectedSheetsFilterScopeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SelectedSheetsFilterScopeConfiguration as SelectedSheetsFilterScopeConfiguration;
    impl crate::value::ToValue for SelectedSheetsFilterScopeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sheet_visual_scoping_configurations {
                properties.insert(
                    "SheetVisualScopingConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-seriesitem.html
    pub struct SeriesItem_ {
        pub data_field_series_item: Option<Box<DataFieldSeriesItem_>>,
        pub field_series_item: Option<Box<FieldSeriesItem_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SeriesItem as SeriesItem;
    impl crate::value::ToValue for SeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_field_series_item {
                properties.insert(
                    "DataFieldSeriesItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_series_item {
                properties.insert(
                    "FieldSeriesItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-setparametervalueconfiguration.html
    pub struct SetParameterValueConfiguration_ {
        pub destination_parameter_name: crate::value::ExpString,
        pub value: Box<DestinationParameterValueConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SetParameterValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SetParameterValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SetParameterValueConfiguration as SetParameterValueConfiguration;
    impl crate::value::ToValue for SetParameterValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DestinationParameterName".to_string(),
                crate::value::ToValue::to_value(&self.destination_parameter_name),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-shapeconditionalformat.html
    pub struct ShapeConditionalFormat_ {
        pub background_color: Box<ConditionalFormattingColor_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ShapeConditionalFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ShapeConditionalFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ShapeConditionalFormat as ShapeConditionalFormat;
    impl crate::value::ToValue for ShapeConditionalFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BackgroundColor".to_string(),
                crate::value::ToValue::to_value(&self.background_color),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheet.html
    pub struct Sheet_ {
        pub name: Option<crate::value::ExpString>,
        pub sheet_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Sheet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Sheet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Sheet as Sheet;
    impl crate::value::ToValue for Sheet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sheet_id {
                properties.insert(
                    "SheetId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetcontrolinfoiconlabeloptions.html
    pub struct SheetControlInfoIconLabelOptions_ {
        pub info_icon_text: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetControlInfoIconLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetControlInfoIconLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetControlInfoIconLabelOptions as SheetControlInfoIconLabelOptions;
    impl crate::value::ToValue for SheetControlInfoIconLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_text {
                properties.insert(
                    "InfoIconText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetcontrollayout.html
    pub struct SheetControlLayout_ {
        pub configuration: Box<SheetControlLayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetControlLayout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetControlLayout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetControlLayout as SheetControlLayout;
    impl crate::value::ToValue for SheetControlLayout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetcontrollayoutconfiguration.html
    pub struct SheetControlLayoutConfiguration_ {
        pub grid_layout: Option<Box<GridLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetControlLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetControlLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetControlLayoutConfiguration as SheetControlLayoutConfiguration;
    impl crate::value::ToValue for SheetControlLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.grid_layout {
                properties.insert(
                    "GridLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetdefinition.html
    pub struct SheetDefinition_ {
        pub content_type: Option<crate::value::ExpString>,
        pub description: Option<crate::value::ExpString>,
        pub filter_controls: Option<Vec<FilterControl_>>,
        pub images: Option<Vec<SheetImage_>>,
        pub layouts: Option<Vec<Layout_>>,
        pub name: Option<crate::value::ExpString>,
        pub parameter_controls: Option<Vec<ParameterControl_>>,
        pub sheet_control_layouts: Option<Vec<SheetControlLayout_>>,
        pub sheet_id: crate::value::ExpString,
        pub text_boxes: Option<Vec<SheetTextBox_>>,
        pub title: Option<crate::value::ExpString>,
        pub visuals: Option<Vec<Visual_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetDefinition as SheetDefinition;
    impl crate::value::ToValue for SheetDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content_type {
                properties.insert(
                    "ContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_controls {
                properties.insert(
                    "FilterControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.images {
                properties.insert("Images".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.layouts {
                properties.insert(
                    "Layouts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.parameter_controls {
                properties.insert(
                    "ParameterControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_control_layouts {
                properties.insert(
                    "SheetControlLayouts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_id),
            );
            if let Some(ref value) = self.text_boxes {
                properties.insert(
                    "TextBoxes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visuals {
                properties.insert(
                    "Visuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetelementconfigurationoverrides.html
    pub struct SheetElementConfigurationOverrides_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetElementConfigurationOverrides {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetElementConfigurationOverrides"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetElementConfigurationOverrides as SheetElementConfigurationOverrides;
    impl crate::value::ToValue for SheetElementConfigurationOverrides_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetelementrenderingrule.html
    pub struct SheetElementRenderingRule_ {
        pub configuration_overrides: Box<SheetElementConfigurationOverrides_>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetElementRenderingRule {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetElementRenderingRule"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetElementRenderingRule as SheetElementRenderingRule;
    impl crate::value::ToValue for SheetElementRenderingRule_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ConfigurationOverrides".to_string(),
                crate::value::ToValue::to_value(&self.configuration_overrides),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetimage.html
    pub struct SheetImage_ {
        pub actions: Option<Vec<ImageCustomAction_>>,
        pub image_content_alt_text: Option<crate::value::ExpString>,
        pub interactions: Option<Box<ImageInteractionOptions_>>,
        pub scaling: Option<Box<SheetImageScalingConfiguration_>>,
        pub sheet_image_id: crate::value::ExpString,
        pub source: Box<SheetImageSource_>,
        pub tooltip: Option<Box<SheetImageTooltipConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetImage {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetImage"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetImage as SheetImage;
    impl crate::value::ToValue for SheetImage_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.image_content_alt_text {
                properties.insert(
                    "ImageContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scaling {
                properties.insert(
                    "Scaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetImageId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_image_id),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetimagescalingconfiguration.html
    pub struct SheetImageScalingConfiguration_ {
        pub scaling_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetImageScalingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetImageScalingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetImageScalingConfiguration as SheetImageScalingConfiguration;
    impl crate::value::ToValue for SheetImageScalingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scaling_type {
                properties.insert(
                    "ScalingType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetimagesource.html
    pub struct SheetImageSource_ {
        pub sheet_image_static_file_source: Option<Box<SheetImageStaticFileSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetImageSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetImageSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetImageSource as SheetImageSource;
    impl crate::value::ToValue for SheetImageSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sheet_image_static_file_source {
                properties.insert(
                    "SheetImageStaticFileSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetimagestaticfilesource.html
    pub struct SheetImageStaticFileSource_ {
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetImageStaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetImageStaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetImageStaticFileSource as SheetImageStaticFileSource;
    impl crate::value::ToValue for SheetImageStaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetimagetooltipconfiguration.html
    pub struct SheetImageTooltipConfiguration_ {
        pub tooltip_text: Option<Box<SheetImageTooltipText_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetImageTooltipConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetImageTooltipConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetImageTooltipConfiguration as SheetImageTooltipConfiguration;
    impl crate::value::ToValue for SheetImageTooltipConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tooltip_text {
                properties.insert(
                    "TooltipText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetimagetooltiptext.html
    pub struct SheetImageTooltipText_ {
        pub plain_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetImageTooltipText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetImageTooltipText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetImageTooltipText as SheetImageTooltipText;
    impl crate::value::ToValue for SheetImageTooltipText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheettextbox.html
    pub struct SheetTextBox_ {
        pub content: Option<crate::value::ExpString>,
        pub sheet_text_box_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetTextBox {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetTextBox"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetTextBox as SheetTextBox;
    impl crate::value::ToValue for SheetTextBox_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content {
                properties.insert(
                    "Content".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetTextBoxId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_text_box_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-sheetvisualscopingconfiguration.html
    pub struct SheetVisualScopingConfiguration_ {
        pub scope: crate::value::ExpString,
        pub sheet_id: crate::value::ExpString,
        pub visual_ids: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SheetVisualScopingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SheetVisualScopingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SheetVisualScopingConfiguration as SheetVisualScopingConfiguration;
    impl crate::value::ToValue for SheetVisualScopingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Scope".to_string(),
                crate::value::ToValue::to_value(&self.scope),
            );
            properties.insert(
                "SheetId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_id),
            );
            if let Some(ref value) = self.visual_ids {
                properties.insert(
                    "VisualIds".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-shortformattext.html
    pub struct ShortFormatText_ {
        pub plain_text: Option<crate::value::ExpString>,
        pub rich_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ShortFormatText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ShortFormatText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ShortFormatText as ShortFormatText;
    impl crate::value::ToValue for ShortFormatText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rich_text {
                properties.insert(
                    "RichText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-simpleclustermarker.html
    pub struct SimpleClusterMarker_ {
        pub color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SimpleClusterMarker {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SimpleClusterMarker"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SimpleClusterMarker as SimpleClusterMarker;
    impl crate::value::ToValue for SimpleClusterMarker_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-singleaxisoptions.html
    pub struct SingleAxisOptions_ {
        pub y_axis_options: Option<Box<YAxisOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SingleAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SingleAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SingleAxisOptions as SingleAxisOptions;
    impl crate::value::ToValue for SingleAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.y_axis_options {
                properties.insert(
                    "YAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-slidercontroldisplayoptions.html
    pub struct SliderControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SliderControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SliderControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SliderControlDisplayOptions as SliderControlDisplayOptions;
    impl crate::value::ToValue for SliderControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-smallmultiplesaxisproperties.html
    pub struct SmallMultiplesAxisProperties_ {
        pub placement: Option<crate::value::ExpString>,
        pub scale: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SmallMultiplesAxisProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SmallMultiplesAxisProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SmallMultiplesAxisProperties as SmallMultiplesAxisProperties;
    impl crate::value::ToValue for SmallMultiplesAxisProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scale {
                properties.insert("Scale".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-smallmultiplesoptions.html
    pub struct SmallMultiplesOptions_ {
        pub max_visible_columns: Option<f64>,
        pub max_visible_rows: Option<f64>,
        pub panel_configuration: Option<Box<PanelConfiguration_>>,
        pub x_axis: Option<Box<SmallMultiplesAxisProperties_>>,
        pub y_axis: Option<Box<SmallMultiplesAxisProperties_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SmallMultiplesOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SmallMultiplesOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SmallMultiplesOptions as SmallMultiplesOptions;
    impl crate::value::ToValue for SmallMultiplesOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.max_visible_columns {
                properties.insert(
                    "MaxVisibleColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.max_visible_rows {
                properties.insert(
                    "MaxVisibleRows".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.panel_configuration {
                properties.insert(
                    "PanelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-spacing.html
    pub struct Spacing_ {
        pub bottom: Option<crate::value::ExpString>,
        pub left: Option<crate::value::ExpString>,
        pub right: Option<crate::value::ExpString>,
        pub top: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Spacing {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Spacing"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Spacing as Spacing;
    impl crate::value::ToValue for Spacing_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bottom {
                properties.insert("Bottom".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.left {
                properties.insert("Left".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.right {
                properties.insert("Right".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.top {
                properties.insert("Top".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-spatialstaticfile.html
    pub struct SpatialStaticFile_ {
        pub source: Option<Box<StaticFileSource_>>,
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SpatialStaticFile {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SpatialStaticFile"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SpatialStaticFile as SpatialStaticFile;
    impl crate::value::ToValue for SpatialStaticFile_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-staticfile.html
    pub struct StaticFile_ {
        pub image_static_file: Option<Box<ImageStaticFile_>>,
        pub spatial_static_file: Option<Box<SpatialStaticFile_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StaticFile {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StaticFile"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StaticFile as StaticFile;
    impl crate::value::ToValue for StaticFile_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_static_file {
                properties.insert(
                    "ImageStaticFile".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.spatial_static_file {
                properties.insert(
                    "SpatialStaticFile".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-staticfiles3sourceoptions.html
    pub struct StaticFileS3SourceOptions_ {
        pub bucket_name: crate::value::ExpString,
        pub object_key: crate::value::ExpString,
        pub region: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StaticFileS3SourceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StaticFileS3SourceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StaticFileS3SourceOptions as StaticFileS3SourceOptions;
    impl crate::value::ToValue for StaticFileS3SourceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BucketName".to_string(),
                crate::value::ToValue::to_value(&self.bucket_name),
            );
            properties.insert(
                "ObjectKey".to_string(),
                crate::value::ToValue::to_value(&self.object_key),
            );
            properties.insert(
                "Region".to_string(),
                crate::value::ToValue::to_value(&self.region),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-staticfilesource.html
    pub struct StaticFileSource_ {
        pub s3_options: Option<Box<StaticFileS3SourceOptions_>>,
        pub url_options: Option<Box<StaticFileUrlSourceOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StaticFileSource as StaticFileSource;
    impl crate::value::ToValue for StaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.s3_options {
                properties.insert(
                    "S3Options".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_options {
                properties.insert(
                    "UrlOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-staticfileurlsourceoptions.html
    pub struct StaticFileUrlSourceOptions_ {
        pub url: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StaticFileUrlSourceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StaticFileUrlSourceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StaticFileUrlSourceOptions as StaticFileUrlSourceOptions;
    impl crate::value::ToValue for StaticFileUrlSourceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Url".to_string(),
                crate::value::ToValue::to_value(&self.url),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-stringdefaultvalues.html
    pub struct StringDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StringDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StringDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StringDefaultValues as StringDefaultValues;
    impl crate::value::ToValue for StringDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-stringformatconfiguration.html
    pub struct StringFormatConfiguration_ {
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub numeric_format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StringFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StringFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StringFormatConfiguration as StringFormatConfiguration;
    impl crate::value::ToValue for StringFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_format_configuration {
                properties.insert(
                    "NumericFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-stringparameter.html
    pub struct StringParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StringParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StringParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StringParameter as StringParameter;
    impl crate::value::ToValue for StringParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-stringparameterdeclaration.html
    pub struct StringParameterDeclaration_ {
        pub default_values: Option<Box<StringDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<StringValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StringParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StringParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StringParameterDeclaration as StringParameterDeclaration;
    impl crate::value::ToValue for StringParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-stringvaluewhenunsetconfiguration.html
    pub struct StringValueWhenUnsetConfiguration_ {
        pub custom_value: Option<crate::value::ExpString>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_StringValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.StringValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_StringValueWhenUnsetConfiguration as StringValueWhenUnsetConfiguration;
    impl crate::value::ToValue for StringValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-subtotaloptions.html
    pub struct SubtotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_level: Option<crate::value::ExpString>,
        pub field_level_options: Option<Vec<PivotTableFieldSubtotalOptions_>>,
        pub metric_header_cell_style: Option<Box<TableCellStyle_>>,
        pub style_targets: Option<Vec<TableStyleTarget_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<crate::value::ExpString>,
        pub value_cell_style: Option<Box<TableCellStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_SubtotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.SubtotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_SubtotalOptions as SubtotalOptions;
    impl crate::value::ToValue for SubtotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_level {
                properties.insert(
                    "FieldLevel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_level_options {
                properties.insert(
                    "FieldLevelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_header_cell_style {
                properties.insert(
                    "MetricHeaderCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.style_targets {
                properties.insert(
                    "StyleTargets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_cell_style {
                properties.insert(
                    "ValueCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableaggregatedfieldwells.html
    pub struct TableAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableAggregatedFieldWells as TableAggregatedFieldWells;
    impl crate::value::ToValue for TableAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableborderoptions.html
    pub struct TableBorderOptions_ {
        pub color: Option<crate::value::ExpString>,
        pub style: Option<crate::value::ExpString>,
        pub thickness: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableBorderOptions as TableBorderOptions;
    impl crate::value::ToValue for TableBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.thickness {
                properties.insert(
                    "Thickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablecellconditionalformatting.html
    pub struct TableCellConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub text_format: Option<Box<TextConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableCellConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableCellConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableCellConditionalFormatting as TableCellConditionalFormatting;
    impl crate::value::ToValue for TableCellConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.text_format {
                properties.insert(
                    "TextFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablecellimagesizingconfiguration.html
    pub struct TableCellImageSizingConfiguration_ {
        pub table_cell_image_scaling_configuration: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableCellImageSizingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableCellImageSizingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableCellImageSizingConfiguration as TableCellImageSizingConfiguration;
    impl crate::value::ToValue for TableCellImageSizingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_cell_image_scaling_configuration {
                properties.insert(
                    "TableCellImageScalingConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablecellstyle.html
    pub struct TableCellStyle_ {
        pub background_color: Option<crate::value::ExpString>,
        pub border: Option<Box<GlobalTableBorderOptions_>>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub height: Option<f64>,
        pub horizontal_text_alignment: Option<crate::value::ExpString>,
        pub text_wrap: Option<crate::value::ExpString>,
        pub vertical_text_alignment: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableCellStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableCellStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableCellStyle as TableCellStyle;
    impl crate::value::ToValue for TableCellStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border {
                properties.insert("Border".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.horizontal_text_alignment {
                properties.insert(
                    "HorizontalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_wrap {
                properties.insert(
                    "TextWrap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_text_alignment {
                properties.insert(
                    "VerticalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableconditionalformatting.html
    pub struct TableConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<TableConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableConditionalFormatting as TableConditionalFormatting;
    impl crate::value::ToValue for TableConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableconditionalformattingoption.html
    pub struct TableConditionalFormattingOption_ {
        pub cell: Option<Box<TableCellConditionalFormatting_>>,
        pub row: Option<Box<TableRowConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableConditionalFormattingOption as TableConditionalFormattingOption;
    impl crate::value::ToValue for TableConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell {
                properties.insert("Cell".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.row {
                properties.insert("Row".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableconfiguration.html
    pub struct TableConfiguration_ {
        pub field_options: Option<Box<TableFieldOptions_>>,
        pub field_wells: Option<Box<TableFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub paginated_report_options: Option<Box<TablePaginatedReportOptions_>>,
        pub sort_configuration: Option<Box<TableSortConfiguration_>>,
        pub table_inline_visualizations: Option<Vec<TableInlineVisualization_>>,
        pub table_options: Option<Box<TableOptions_>>,
        pub total_options: Option<Box<TotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableConfiguration as TableConfiguration;
    impl crate::value::ToValue for TableConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_options {
                properties.insert(
                    "FieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_report_options {
                properties.insert(
                    "PaginatedReportOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_inline_visualizations {
                properties.insert(
                    "TableInlineVisualizations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_options {
                properties.insert(
                    "TableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_options {
                properties.insert(
                    "TotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldcustomiconcontent.html
    pub struct TableFieldCustomIconContent_ {
        pub icon: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldCustomIconContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldCustomIconContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldCustomIconContent as TableFieldCustomIconContent;
    impl crate::value::ToValue for TableFieldCustomIconContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldcustomtextcontent.html
    pub struct TableFieldCustomTextContent_ {
        pub font_configuration: Box<FontConfiguration_>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldCustomTextContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldCustomTextContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldCustomTextContent as TableFieldCustomTextContent;
    impl crate::value::ToValue for TableFieldCustomTextContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FontConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.font_configuration),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldimageconfiguration.html
    pub struct TableFieldImageConfiguration_ {
        pub sizing_options: Option<Box<TableCellImageSizingConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldImageConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldImageConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldImageConfiguration as TableFieldImageConfiguration;
    impl crate::value::ToValue for TableFieldImageConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sizing_options {
                properties.insert(
                    "SizingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldlinkconfiguration.html
    pub struct TableFieldLinkConfiguration_ {
        pub content: Box<TableFieldLinkContentConfiguration_>,
        pub target: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldLinkConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldLinkConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldLinkConfiguration as TableFieldLinkConfiguration;
    impl crate::value::ToValue for TableFieldLinkConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Content".to_string(),
                crate::value::ToValue::to_value(&self.content),
            );
            properties.insert(
                "Target".to_string(),
                crate::value::ToValue::to_value(&self.target),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldlinkcontentconfiguration.html
    pub struct TableFieldLinkContentConfiguration_ {
        pub custom_icon_content: Option<Box<TableFieldCustomIconContent_>>,
        pub custom_text_content: Option<Box<TableFieldCustomTextContent_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldLinkContentConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldLinkContentConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldLinkContentConfiguration as TableFieldLinkContentConfiguration;
    impl crate::value::ToValue for TableFieldLinkContentConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_icon_content {
                properties.insert(
                    "CustomIconContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_text_content {
                properties.insert(
                    "CustomTextContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldoption.html
    pub struct TableFieldOption_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub url_styling: Option<Box<TableFieldURLConfiguration_>>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldOption as TableFieldOption;
    impl crate::value::ToValue for TableFieldOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.url_styling {
                properties.insert(
                    "URLStyling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldoptions.html
    pub struct TableFieldOptions_ {
        pub order: Option<Vec<crate::value::ExpString>>,
        pub pinned_field_options: Option<Box<TablePinnedFieldOptions_>>,
        pub selected_field_options: Option<Vec<TableFieldOption_>>,
        pub transposed_table_options: Option<Vec<TransposedTableOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldOptions as TableFieldOptions;
    impl crate::value::ToValue for TableFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.order {
                properties.insert("Order".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.pinned_field_options {
                properties.insert(
                    "PinnedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.transposed_table_options {
                properties.insert(
                    "TransposedTableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldurlconfiguration.html
    pub struct TableFieldURLConfiguration_ {
        pub image_configuration: Option<Box<TableFieldImageConfiguration_>>,
        pub link_configuration: Option<Box<TableFieldLinkConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldURLConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldURLConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldURLConfiguration as TableFieldURLConfiguration;
    impl crate::value::ToValue for TableFieldURLConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_configuration {
                properties.insert(
                    "ImageConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.link_configuration {
                properties.insert(
                    "LinkConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablefieldwells.html
    pub struct TableFieldWells_ {
        pub table_aggregated_field_wells: Option<Box<TableAggregatedFieldWells_>>,
        pub table_unaggregated_field_wells: Option<Box<TableUnaggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableFieldWells as TableFieldWells;
    impl crate::value::ToValue for TableFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_aggregated_field_wells {
                properties.insert(
                    "TableAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_unaggregated_field_wells {
                properties.insert(
                    "TableUnaggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableinlinevisualization.html
    pub struct TableInlineVisualization_ {
        pub data_bars: Option<Box<DataBarsOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableInlineVisualization {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableInlineVisualization"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableInlineVisualization as TableInlineVisualization;
    impl crate::value::ToValue for TableInlineVisualization_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_bars {
                properties.insert(
                    "DataBars".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableoptions.html
    pub struct TableOptions_ {
        pub cell_style: Option<Box<TableCellStyle_>>,
        pub header_style: Option<Box<TableCellStyle_>>,
        pub orientation: Option<crate::value::ExpString>,
        pub row_alternate_color_options: Option<Box<RowAlternateColorOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableOptions as TableOptions;
    impl crate::value::ToValue for TableOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_style {
                properties.insert(
                    "CellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.header_style {
                properties.insert(
                    "HeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.orientation {
                properties.insert(
                    "Orientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_alternate_color_options {
                properties.insert(
                    "RowAlternateColorOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablepaginatedreportoptions.html
    pub struct TablePaginatedReportOptions_ {
        pub overflow_column_header_visibility: Option<crate::value::ExpString>,
        pub vertical_overflow_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TablePaginatedReportOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TablePaginatedReportOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TablePaginatedReportOptions as TablePaginatedReportOptions;
    impl crate::value::ToValue for TablePaginatedReportOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.overflow_column_header_visibility {
                properties.insert(
                    "OverflowColumnHeaderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_overflow_visibility {
                properties.insert(
                    "VerticalOverflowVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablepinnedfieldoptions.html
    pub struct TablePinnedFieldOptions_ {
        pub pinned_left_fields: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TablePinnedFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TablePinnedFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TablePinnedFieldOptions as TablePinnedFieldOptions;
    impl crate::value::ToValue for TablePinnedFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pinned_left_fields {
                properties.insert(
                    "PinnedLeftFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablerowconditionalformatting.html
    pub struct TableRowConditionalFormatting_ {
        pub background_color: Option<Box<ConditionalFormattingColor_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableRowConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableRowConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableRowConditionalFormatting as TableRowConditionalFormatting;
    impl crate::value::ToValue for TableRowConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablesideborderoptions.html
    pub struct TableSideBorderOptions_ {
        pub bottom: Option<Box<TableBorderOptions_>>,
        pub inner_horizontal: Option<Box<TableBorderOptions_>>,
        pub inner_vertical: Option<Box<TableBorderOptions_>>,
        pub left: Option<Box<TableBorderOptions_>>,
        pub right: Option<Box<TableBorderOptions_>>,
        pub top: Option<Box<TableBorderOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableSideBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableSideBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableSideBorderOptions as TableSideBorderOptions;
    impl crate::value::ToValue for TableSideBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bottom {
                properties.insert("Bottom".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.inner_horizontal {
                properties.insert(
                    "InnerHorizontal".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.inner_vertical {
                properties.insert(
                    "InnerVertical".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.left {
                properties.insert("Left".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.right {
                properties.insert("Right".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.top {
                properties.insert("Top".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablesortconfiguration.html
    pub struct TableSortConfiguration_ {
        pub pagination_configuration: Option<Box<PaginationConfiguration_>>,
        pub row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableSortConfiguration as TableSortConfiguration;
    impl crate::value::ToValue for TableSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pagination_configuration {
                properties.insert(
                    "PaginationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_sort {
                properties.insert(
                    "RowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablestyletarget.html
    pub struct TableStyleTarget_ {
        pub cell_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableStyleTarget {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableStyleTarget"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableStyleTarget as TableStyleTarget;
    impl crate::value::ToValue for TableStyleTarget_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CellType".to_string(),
                crate::value::ToValue::to_value(&self.cell_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tableunaggregatedfieldwells.html
    pub struct TableUnaggregatedFieldWells_ {
        pub values: Option<Vec<UnaggregatedField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableUnaggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableUnaggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableUnaggregatedFieldWells as TableUnaggregatedFieldWells;
    impl crate::value::ToValue for TableUnaggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tablevisual.html
    pub struct TableVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<TableConfiguration_>>,
        pub conditional_formatting: Option<Box<TableConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TableVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TableVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TableVisual as TableVisual;
    impl crate::value::ToValue for TableVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-textareacontroldisplayoptions.html
    pub struct TextAreaControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub placeholder_options: Option<Box<TextControlPlaceholderOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TextAreaControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TextAreaControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TextAreaControlDisplayOptions as TextAreaControlDisplayOptions;
    impl crate::value::ToValue for TextAreaControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder_options {
                properties.insert(
                    "PlaceholderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-textconditionalformat.html
    pub struct TextConditionalFormat_ {
        pub background_color: Option<Box<ConditionalFormattingColor_>>,
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TextConditionalFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TextConditionalFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TextConditionalFormat as TextConditionalFormat;
    impl crate::value::ToValue for TextConditionalFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-textcontrolplaceholderoptions.html
    pub struct TextControlPlaceholderOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TextControlPlaceholderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TextControlPlaceholderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TextControlPlaceholderOptions as TextControlPlaceholderOptions;
    impl crate::value::ToValue for TextControlPlaceholderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-textfieldcontroldisplayoptions.html
    pub struct TextFieldControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub placeholder_options: Option<Box<TextControlPlaceholderOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TextFieldControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TextFieldControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TextFieldControlDisplayOptions as TextFieldControlDisplayOptions;
    impl crate::value::ToValue for TextFieldControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder_options {
                properties.insert(
                    "PlaceholderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-thousandseparatoroptions.html
    pub struct ThousandSeparatorOptions_ {
        pub grouping_style: Option<crate::value::ExpString>,
        pub symbol: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ThousandSeparatorOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ThousandSeparatorOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ThousandSeparatorOptions as ThousandSeparatorOptions;
    impl crate::value::ToValue for ThousandSeparatorOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.grouping_style {
                properties.insert(
                    "GroupingStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.symbol {
                properties.insert("Symbol".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-timebasedforecastproperties.html
    pub struct TimeBasedForecastProperties_ {
        pub lower_boundary: Option<f64>,
        pub periods_backward: Option<f64>,
        pub periods_forward: Option<f64>,
        pub prediction_interval: Option<f64>,
        pub seasonality: Option<f64>,
        pub upper_boundary: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TimeBasedForecastProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TimeBasedForecastProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TimeBasedForecastProperties as TimeBasedForecastProperties;
    impl crate::value::ToValue for TimeBasedForecastProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.lower_boundary {
                properties.insert(
                    "LowerBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_backward {
                properties.insert(
                    "PeriodsBackward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_forward {
                properties.insert(
                    "PeriodsForward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prediction_interval {
                properties.insert(
                    "PredictionInterval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.seasonality {
                properties.insert(
                    "Seasonality".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.upper_boundary {
                properties.insert(
                    "UpperBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-timeequalityfilter.html
    pub struct TimeEqualityFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TimeEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TimeEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TimeEqualityFilter as TimeEqualityFilter;
    impl crate::value::ToValue for TimeEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-timerangedrilldownfilter.html
    pub struct TimeRangeDrillDownFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub range_maximum: crate::value::ExpString,
        pub range_minimum: crate::value::ExpString,
        pub time_granularity: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TimeRangeDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TimeRangeDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TimeRangeDrillDownFilter as TimeRangeDrillDownFilter;
    impl crate::value::ToValue for TimeRangeDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "RangeMaximum".to_string(),
                crate::value::ToValue::to_value(&self.range_maximum),
            );
            properties.insert(
                "RangeMinimum".to_string(),
                crate::value::ToValue::to_value(&self.range_minimum),
            );
            properties.insert(
                "TimeGranularity".to_string(),
                crate::value::ToValue::to_value(&self.time_granularity),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-timerangefilter.html
    pub struct TimeRangeFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub exclude_period_configuration: Option<Box<ExcludePeriodConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub null_option: crate::value::ExpString,
        pub range_maximum_value: Option<Box<TimeRangeFilterValue_>>,
        pub range_minimum_value: Option<Box<TimeRangeFilterValue_>>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TimeRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TimeRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TimeRangeFilter as TimeRangeFilter;
    impl crate::value::ToValue for TimeRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.exclude_period_configuration {
                properties.insert(
                    "ExcludePeriodConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.range_maximum_value {
                properties.insert(
                    "RangeMaximumValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum_value {
                properties.insert(
                    "RangeMinimumValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-timerangefiltervalue.html
    pub struct TimeRangeFilterValue_ {
        pub parameter: Option<crate::value::ExpString>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub static_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TimeRangeFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TimeRangeFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TimeRangeFilterValue as TimeRangeFilterValue;
    impl crate::value::ToValue for TimeRangeFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.parameter {
                properties.insert(
                    "Parameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tooltipitem.html
    pub struct TooltipItem_ {
        pub column_tooltip_item: Option<Box<ColumnTooltipItem_>>,
        pub field_tooltip_item: Option<Box<FieldTooltipItem_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TooltipItem as TooltipItem;
    impl crate::value::ToValue for TooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_tooltip_item {
                properties.insert(
                    "ColumnTooltipItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_tooltip_item {
                properties.insert(
                    "FieldTooltipItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-tooltipoptions.html
    pub struct TooltipOptions_ {
        pub field_based_tooltip: Option<Box<FieldBasedTooltip_>>,
        pub selected_tooltip_type: Option<crate::value::ExpString>,
        pub tooltip_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TooltipOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TooltipOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TooltipOptions as TooltipOptions;
    impl crate::value::ToValue for TooltipOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_based_tooltip {
                properties.insert(
                    "FieldBasedTooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_tooltip_type {
                properties.insert(
                    "SelectedTooltipType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_visibility {
                properties.insert(
                    "TooltipVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-topbottomfilter.html
    pub struct TopBottomFilter_ {
        pub aggregation_sort_configurations: Vec<AggregationSortConfiguration_>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub limit: Option<f64>,
        pub parameter_name: Option<crate::value::ExpString>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TopBottomFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TopBottomFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TopBottomFilter as TopBottomFilter;
    impl crate::value::ToValue for TopBottomFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AggregationSortConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.aggregation_sort_configurations),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-topbottommoverscomputation.html
    pub struct TopBottomMoversComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub mover_size: Option<f64>,
        pub name: Option<crate::value::ExpString>,
        pub sort_order: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TopBottomMoversComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TopBottomMoversComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TopBottomMoversComputation as TopBottomMoversComputation;
    impl crate::value::ToValue for TopBottomMoversComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.mover_size {
                properties.insert(
                    "MoverSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_order {
                properties.insert(
                    "SortOrder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-topbottomrankedcomputation.html
    pub struct TopBottomRankedComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub result_size: Option<f64>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TopBottomRankedComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TopBottomRankedComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TopBottomRankedComputation as TopBottomRankedComputation;
    impl crate::value::ToValue for TopBottomRankedComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.result_size {
                properties.insert(
                    "ResultSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-totalaggregationcomputation.html
    pub struct TotalAggregationComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TotalAggregationComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TotalAggregationComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TotalAggregationComputation as TotalAggregationComputation;
    impl crate::value::ToValue for TotalAggregationComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-totalaggregationfunction.html
    pub struct TotalAggregationFunction_ {
        pub simple_total_aggregation_function: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TotalAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TotalAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TotalAggregationFunction as TotalAggregationFunction;
    impl crate::value::ToValue for TotalAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_total_aggregation_function {
                properties.insert(
                    "SimpleTotalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-totalaggregationoption.html
    pub struct TotalAggregationOption_ {
        pub field_id: crate::value::ExpString,
        pub total_aggregation_function: Box<TotalAggregationFunction_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TotalAggregationOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TotalAggregationOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TotalAggregationOption as TotalAggregationOption;
    impl crate::value::ToValue for TotalAggregationOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.insert(
                "TotalAggregationFunction".to_string(),
                crate::value::ToValue::to_value(&self.total_aggregation_function),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-totaloptions.html
    pub struct TotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub placement: Option<crate::value::ExpString>,
        pub scroll_status: Option<crate::value::ExpString>,
        pub total_aggregation_options: Option<Vec<TotalAggregationOption_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TotalOptions as TotalOptions;
    impl crate::value::ToValue for TotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scroll_status {
                properties.insert(
                    "ScrollStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation_options {
                properties.insert(
                    "TotalAggregationOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-transposedtableoption.html
    pub struct TransposedTableOption_ {
        pub column_index: Option<f64>,
        pub column_type: crate::value::ExpString,
        pub column_width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TransposedTableOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TransposedTableOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TransposedTableOption as TransposedTableOption;
    impl crate::value::ToValue for TransposedTableOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_index {
                properties.insert(
                    "ColumnIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnType".to_string(),
                crate::value::ToValue::to_value(&self.column_type),
            );
            if let Some(ref value) = self.column_width {
                properties.insert(
                    "ColumnWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-treemapaggregatedfieldwells.html
    pub struct TreeMapAggregatedFieldWells_ {
        pub colors: Option<Vec<MeasureField_>>,
        pub groups: Option<Vec<DimensionField_>>,
        pub sizes: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TreeMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TreeMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TreeMapAggregatedFieldWells as TreeMapAggregatedFieldWells;
    impl crate::value::ToValue for TreeMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.groups {
                properties.insert("Groups".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sizes {
                properties.insert("Sizes".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-treemapconfiguration.html
    pub struct TreeMapConfiguration_ {
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_scale: Option<Box<ColorScale_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<TreeMapFieldWells_>>,
        pub group_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub size_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<TreeMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TreeMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TreeMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TreeMapConfiguration as TreeMapConfiguration;
    impl crate::value::ToValue for TreeMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_scale {
                properties.insert(
                    "ColorScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.group_label_options {
                properties.insert(
                    "GroupLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size_label_options {
                properties.insert(
                    "SizeLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-treemapfieldwells.html
    pub struct TreeMapFieldWells_ {
        pub tree_map_aggregated_field_wells: Option<Box<TreeMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TreeMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TreeMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TreeMapFieldWells as TreeMapFieldWells;
    impl crate::value::ToValue for TreeMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tree_map_aggregated_field_wells {
                properties.insert(
                    "TreeMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-treemapsortconfiguration.html
    pub struct TreeMapSortConfiguration_ {
        pub tree_map_group_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub tree_map_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TreeMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TreeMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TreeMapSortConfiguration as TreeMapSortConfiguration;
    impl crate::value::ToValue for TreeMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tree_map_group_items_limit_configuration {
                properties.insert(
                    "TreeMapGroupItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tree_map_sort {
                properties.insert(
                    "TreeMapSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-treemapvisual.html
    pub struct TreeMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<TreeMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TreeMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TreeMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TreeMapVisual as TreeMapVisual;
    impl crate::value::ToValue for TreeMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-trendarrowoptions.html
    pub struct TrendArrowOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_TrendArrowOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.TrendArrowOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_TrendArrowOptions as TrendArrowOptions;
    impl crate::value::ToValue for TrendArrowOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-unaggregatedfield.html
    pub struct UnaggregatedField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<FormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_UnaggregatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.UnaggregatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_UnaggregatedField as UnaggregatedField;
    impl crate::value::ToValue for UnaggregatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-uniquevaluescomputation.html
    pub struct UniqueValuesComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_UniqueValuesComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.UniqueValuesComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_UniqueValuesComputation as UniqueValuesComputation;
    impl crate::value::ToValue for UniqueValuesComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-validationstrategy.html
    pub struct ValidationStrategy_ {
        pub mode: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_ValidationStrategy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.ValidationStrategy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_ValidationStrategy as ValidationStrategy;
    impl crate::value::ToValue for ValidationStrategy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Mode".to_string(),
                crate::value::ToValue::to_value(&self.mode),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visiblerangeoptions.html
    pub struct VisibleRangeOptions_ {
        pub percent_range: Option<Box<PercentVisibleRange_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisibleRangeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisibleRangeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisibleRangeOptions as VisibleRangeOptions;
    impl crate::value::ToValue for VisibleRangeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percent_range {
                properties.insert(
                    "PercentRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visual.html
    pub struct Visual_ {
        pub bar_chart_visual: Option<Box<BarChartVisual_>>,
        pub box_plot_visual: Option<Box<BoxPlotVisual_>>,
        pub combo_chart_visual: Option<Box<ComboChartVisual_>>,
        pub custom_content_visual: Option<Box<CustomContentVisual_>>,
        pub empty_visual: Option<Box<EmptyVisual_>>,
        pub filled_map_visual: Option<Box<FilledMapVisual_>>,
        pub funnel_chart_visual: Option<Box<FunnelChartVisual_>>,
        pub gauge_chart_visual: Option<Box<GaugeChartVisual_>>,
        pub geospatial_map_visual: Option<Box<GeospatialMapVisual_>>,
        pub heat_map_visual: Option<Box<HeatMapVisual_>>,
        pub histogram_visual: Option<Box<HistogramVisual_>>,
        pub insight_visual: Option<Box<InsightVisual_>>,
        pub kpi_visual: Option<Box<KPIVisual_>>,
        pub layer_map_visual: Option<Box<LayerMapVisual_>>,
        pub line_chart_visual: Option<Box<LineChartVisual_>>,
        pub pie_chart_visual: Option<Box<PieChartVisual_>>,
        pub pivot_table_visual: Option<Box<PivotTableVisual_>>,
        pub plugin_visual: Option<Box<PluginVisual_>>,
        pub radar_chart_visual: Option<Box<RadarChartVisual_>>,
        pub sankey_diagram_visual: Option<Box<SankeyDiagramVisual_>>,
        pub scatter_plot_visual: Option<Box<ScatterPlotVisual_>>,
        pub table_visual: Option<Box<TableVisual_>>,
        pub tree_map_visual: Option<Box<TreeMapVisual_>>,
        pub waterfall_visual: Option<Box<WaterfallVisual_>>,
        pub word_cloud_visual: Option<Box<WordCloudVisual_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_Visual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.Visual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_Visual as Visual;
    impl crate::value::ToValue for Visual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_chart_visual {
                properties.insert(
                    "BarChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.box_plot_visual {
                properties.insert(
                    "BoxPlotVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.combo_chart_visual {
                properties.insert(
                    "ComboChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_content_visual {
                properties.insert(
                    "CustomContentVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.empty_visual {
                properties.insert(
                    "EmptyVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filled_map_visual {
                properties.insert(
                    "FilledMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.funnel_chart_visual {
                properties.insert(
                    "FunnelChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gauge_chart_visual {
                properties.insert(
                    "GaugeChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.geospatial_map_visual {
                properties.insert(
                    "GeospatialMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_visual {
                properties.insert(
                    "HeatMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.histogram_visual {
                properties.insert(
                    "HistogramVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.insight_visual {
                properties.insert(
                    "InsightVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.kpi_visual {
                properties.insert(
                    "KPIVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.layer_map_visual {
                properties.insert(
                    "LayerMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_chart_visual {
                properties.insert(
                    "LineChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pie_chart_visual {
                properties.insert(
                    "PieChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pivot_table_visual {
                properties.insert(
                    "PivotTableVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.plugin_visual {
                properties.insert(
                    "PluginVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.radar_chart_visual {
                properties.insert(
                    "RadarChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sankey_diagram_visual {
                properties.insert(
                    "SankeyDiagramVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scatter_plot_visual {
                properties.insert(
                    "ScatterPlotVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_visual {
                properties.insert(
                    "TableVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tree_map_visual {
                properties.insert(
                    "TreeMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.waterfall_visual {
                properties.insert(
                    "WaterfallVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_cloud_visual {
                properties.insert(
                    "WordCloudVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualcustomaction.html
    pub struct VisualCustomAction_ {
        pub action_operations: Vec<VisualCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualCustomAction as VisualCustomAction;
    impl crate::value::ToValue for VisualCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualcustomactionoperation.html
    pub struct VisualCustomActionOperation_ {
        pub filter_operation: Option<Box<CustomActionFilterOperation_>>,
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualCustomActionOperation as VisualCustomActionOperation;
    impl crate::value::ToValue for VisualCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filter_operation {
                properties.insert(
                    "FilterOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualinteractionoptions.html
    pub struct VisualInteractionOptions_ {
        pub context_menu_option: Option<Box<ContextMenuOption_>>,
        pub visual_menu_option: Option<Box<VisualMenuOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualInteractionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualInteractionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualInteractionOptions as VisualInteractionOptions;
    impl crate::value::ToValue for VisualInteractionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.context_menu_option {
                properties.insert(
                    "ContextMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_menu_option {
                properties.insert(
                    "VisualMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualmenuoption.html
    pub struct VisualMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualMenuOption as VisualMenuOption;
    impl crate::value::ToValue for VisualMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualpalette.html
    pub struct VisualPalette_ {
        pub chart_color: Option<crate::value::ExpString>,
        pub color_map: Option<Vec<DataPathColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualPalette {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualPalette"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualPalette as VisualPalette;
    impl crate::value::ToValue for VisualPalette_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_color {
                properties.insert(
                    "ChartColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_map {
                properties.insert(
                    "ColorMap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualsubtitlelabeloptions.html
    pub struct VisualSubtitleLabelOptions_ {
        pub format_text: Option<Box<LongFormatText_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualSubtitleLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualSubtitleLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualSubtitleLabelOptions as VisualSubtitleLabelOptions;
    impl crate::value::ToValue for VisualSubtitleLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_text {
                properties.insert(
                    "FormatText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-visualtitlelabeloptions.html
    pub struct VisualTitleLabelOptions_ {
        pub format_text: Option<Box<ShortFormatText_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_VisualTitleLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.VisualTitleLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_VisualTitleLabelOptions as VisualTitleLabelOptions;
    impl crate::value::ToValue for VisualTitleLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_text {
                properties.insert(
                    "FormatText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartaggregatedfieldwells.html
    pub struct WaterfallChartAggregatedFieldWells_ {
        pub breakdowns: Option<Vec<DimensionField_>>,
        pub categories: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartAggregatedFieldWells as WaterfallChartAggregatedFieldWells;
    impl crate::value::ToValue for WaterfallChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.breakdowns {
                properties.insert(
                    "Breakdowns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categories {
                properties.insert(
                    "Categories".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartcolorconfiguration.html
    pub struct WaterfallChartColorConfiguration_ {
        pub group_color_configuration: Option<Box<WaterfallChartGroupColorConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartColorConfiguration as WaterfallChartColorConfiguration;
    impl crate::value::ToValue for WaterfallChartColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_color_configuration {
                properties.insert(
                    "GroupColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartconfiguration.html
    pub struct WaterfallChartConfiguration_ {
        pub category_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub category_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_configuration: Option<Box<WaterfallChartColorConfiguration_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<WaterfallChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<WaterfallChartSortConfiguration_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub waterfall_chart_options: Option<Box<WaterfallChartOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartConfiguration as WaterfallChartConfiguration;
    impl crate::value::ToValue for WaterfallChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_axis_display_options {
                properties.insert(
                    "CategoryAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis_label_options {
                properties.insert(
                    "CategoryAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_configuration {
                properties.insert(
                    "ColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.waterfall_chart_options {
                properties.insert(
                    "WaterfallChartOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartfieldwells.html
    pub struct WaterfallChartFieldWells_ {
        pub waterfall_chart_aggregated_field_wells:
            Option<Box<WaterfallChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartFieldWells as WaterfallChartFieldWells;
    impl crate::value::ToValue for WaterfallChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.waterfall_chart_aggregated_field_wells {
                properties.insert(
                    "WaterfallChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartgroupcolorconfiguration.html
    pub struct WaterfallChartGroupColorConfiguration_ {
        pub negative_bar_color: Option<crate::value::ExpString>,
        pub positive_bar_color: Option<crate::value::ExpString>,
        pub total_bar_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartGroupColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartGroupColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartGroupColorConfiguration as WaterfallChartGroupColorConfiguration;
    impl crate::value::ToValue for WaterfallChartGroupColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.negative_bar_color {
                properties.insert(
                    "NegativeBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.positive_bar_color {
                properties.insert(
                    "PositiveBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_bar_color {
                properties.insert(
                    "TotalBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartoptions.html
    pub struct WaterfallChartOptions_ {
        pub total_bar_label: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartOptions as WaterfallChartOptions;
    impl crate::value::ToValue for WaterfallChartOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.total_bar_label {
                properties.insert(
                    "TotalBarLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallchartsortconfiguration.html
    pub struct WaterfallChartSortConfiguration_ {
        pub breakdown_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallChartSortConfiguration as WaterfallChartSortConfiguration;
    impl crate::value::ToValue for WaterfallChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.breakdown_items_limit {
                properties.insert(
                    "BreakdownItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-waterfallvisual.html
    pub struct WaterfallVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<WaterfallChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WaterfallVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WaterfallVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WaterfallVisual as WaterfallVisual;
    impl crate::value::ToValue for WaterfallVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-whatifpointscenario.html
    pub struct WhatIfPointScenario_ {
        pub date: crate::value::ExpString,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WhatIfPointScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WhatIfPointScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WhatIfPointScenario as WhatIfPointScenario;
    impl crate::value::ToValue for WhatIfPointScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Date".to_string(),
                crate::value::ToValue::to_value(&self.date),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-whatifrangescenario.html
    pub struct WhatIfRangeScenario_ {
        pub end_date: crate::value::ExpString,
        pub start_date: crate::value::ExpString,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WhatIfRangeScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WhatIfRangeScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WhatIfRangeScenario as WhatIfRangeScenario;
    impl crate::value::ToValue for WhatIfRangeScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "EndDate".to_string(),
                crate::value::ToValue::to_value(&self.end_date),
            );
            properties.insert(
                "StartDate".to_string(),
                crate::value::ToValue::to_value(&self.start_date),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-wordcloudaggregatedfieldwells.html
    pub struct WordCloudAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WordCloudAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WordCloudAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WordCloudAggregatedFieldWells as WordCloudAggregatedFieldWells;
    impl crate::value::ToValue for WordCloudAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-wordcloudchartconfiguration.html
    pub struct WordCloudChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<WordCloudFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<WordCloudSortConfiguration_>>,
        pub word_cloud_options: Option<Box<WordCloudOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WordCloudChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WordCloudChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WordCloudChartConfiguration as WordCloudChartConfiguration;
    impl crate::value::ToValue for WordCloudChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_cloud_options {
                properties.insert(
                    "WordCloudOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-wordcloudfieldwells.html
    pub struct WordCloudFieldWells_ {
        pub word_cloud_aggregated_field_wells: Option<Box<WordCloudAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WordCloudFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WordCloudFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WordCloudFieldWells as WordCloudFieldWells;
    impl crate::value::ToValue for WordCloudFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.word_cloud_aggregated_field_wells {
                properties.insert(
                    "WordCloudAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-wordcloudoptions.html
    pub struct WordCloudOptions_ {
        pub cloud_layout: Option<crate::value::ExpString>,
        pub maximum_string_length: Option<f64>,
        pub word_casing: Option<crate::value::ExpString>,
        pub word_orientation: Option<crate::value::ExpString>,
        pub word_padding: Option<crate::value::ExpString>,
        pub word_scaling: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WordCloudOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WordCloudOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WordCloudOptions as WordCloudOptions;
    impl crate::value::ToValue for WordCloudOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cloud_layout {
                properties.insert(
                    "CloudLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_string_length {
                properties.insert(
                    "MaximumStringLength".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_casing {
                properties.insert(
                    "WordCasing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_orientation {
                properties.insert(
                    "WordOrientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_padding {
                properties.insert(
                    "WordPadding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_scaling {
                properties.insert(
                    "WordScaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-wordcloudsortconfiguration.html
    pub struct WordCloudSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WordCloudSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WordCloudSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WordCloudSortConfiguration as WordCloudSortConfiguration;
    impl crate::value::ToValue for WordCloudSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-wordcloudvisual.html
    pub struct WordCloudVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<WordCloudChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_WordCloudVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.WordCloudVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_WordCloudVisual as WordCloudVisual;
    impl crate::value::ToValue for WordCloudVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-yaxisoptions.html
    pub struct YAxisOptions_ {
        pub y_axis: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Analysis_YAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Analysis.YAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Analysis_YAxisOptions as YAxisOptions;
    impl crate::value::ToValue for YAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "YAxis".to_string(),
                crate::value::ToValue::to_value(&self.y_axis),
            );
            properties.into()
        }
    }
}
pub mod custompermissions {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-custompermissions-capabilities.html
    pub struct Capabilities_ {
        pub action: Option<crate::value::ExpString>,
        pub add_or_run_anomaly_detection_for_analyses: Option<crate::value::ExpString>,
        pub analysis: Option<crate::value::ExpString>,
        pub automate: Option<crate::value::ExpString>,
        pub chat_agent: Option<crate::value::ExpString>,
        pub create_and_update_dashboard_email_reports: Option<crate::value::ExpString>,
        pub create_and_update_data_sources: Option<crate::value::ExpString>,
        pub create_and_update_datasets: Option<crate::value::ExpString>,
        pub create_and_update_themes: Option<crate::value::ExpString>,
        pub create_and_update_threshold_alerts: Option<crate::value::ExpString>,
        pub create_chat_agents: Option<crate::value::ExpString>,
        pub create_spice_dataset: Option<crate::value::ExpString>,
        pub create_shared_folders: Option<crate::value::ExpString>,
        pub dashboard: Option<crate::value::ExpString>,
        pub export_to_csv: Option<crate::value::ExpString>,
        pub export_to_csv_in_scheduled_reports: Option<crate::value::ExpString>,
        pub export_to_excel: Option<crate::value::ExpString>,
        pub export_to_excel_in_scheduled_reports: Option<crate::value::ExpString>,
        pub export_to_pdf: Option<crate::value::ExpString>,
        pub export_to_pdf_in_scheduled_reports: Option<crate::value::ExpString>,
        pub flow: Option<crate::value::ExpString>,
        pub include_content_in_scheduled_reports_email: Option<crate::value::ExpString>,
        pub knowledge_base: Option<crate::value::ExpString>,
        pub perform_flow_ui_task: Option<crate::value::ExpString>,
        pub print_reports: Option<crate::value::ExpString>,
        pub publish_without_approval: Option<crate::value::ExpString>,
        pub rename_shared_folders: Option<crate::value::ExpString>,
        pub research: Option<crate::value::ExpString>,
        pub share_analyses: Option<crate::value::ExpString>,
        pub share_dashboards: Option<crate::value::ExpString>,
        pub share_data_sources: Option<crate::value::ExpString>,
        pub share_datasets: Option<crate::value::ExpString>,
        pub space: Option<crate::value::ExpString>,
        pub subscribe_dashboard_email_reports: Option<crate::value::ExpString>,
        pub use_agent_web_search: Option<crate::value::ExpString>,
        pub use_bedrock_models: Option<crate::value::ExpString>,
        pub view_account_spice_capacity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_CustomPermissions_Capabilities {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::CustomPermissions.Capabilities"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_CustomPermissions_Capabilities as Capabilities;
    impl crate::value::ToValue for Capabilities_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.action {
                properties.insert("Action".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.add_or_run_anomaly_detection_for_analyses {
                properties.insert(
                    "AddOrRunAnomalyDetectionForAnalyses".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.analysis {
                properties.insert(
                    "Analysis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.automate {
                properties.insert(
                    "Automate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chat_agent {
                properties.insert(
                    "ChatAgent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_and_update_dashboard_email_reports {
                properties.insert(
                    "CreateAndUpdateDashboardEmailReports".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_and_update_data_sources {
                properties.insert(
                    "CreateAndUpdateDataSources".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_and_update_datasets {
                properties.insert(
                    "CreateAndUpdateDatasets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_and_update_themes {
                properties.insert(
                    "CreateAndUpdateThemes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_and_update_threshold_alerts {
                properties.insert(
                    "CreateAndUpdateThresholdAlerts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_chat_agents {
                properties.insert(
                    "CreateChatAgents".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_spice_dataset {
                properties.insert(
                    "CreateSPICEDataset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_shared_folders {
                properties.insert(
                    "CreateSharedFolders".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dashboard {
                properties.insert(
                    "Dashboard".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_csv {
                properties.insert(
                    "ExportToCsv".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_csv_in_scheduled_reports {
                properties.insert(
                    "ExportToCsvInScheduledReports".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_excel {
                properties.insert(
                    "ExportToExcel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_excel_in_scheduled_reports {
                properties.insert(
                    "ExportToExcelInScheduledReports".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_pdf {
                properties.insert(
                    "ExportToPdf".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_pdf_in_scheduled_reports {
                properties.insert(
                    "ExportToPdfInScheduledReports".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.flow {
                properties.insert("Flow".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.include_content_in_scheduled_reports_email {
                properties.insert(
                    "IncludeContentInScheduledReportsEmail".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.knowledge_base {
                properties.insert(
                    "KnowledgeBase".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.perform_flow_ui_task {
                properties.insert(
                    "PerformFlowUiTask".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.print_reports {
                properties.insert(
                    "PrintReports".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.publish_without_approval {
                properties.insert(
                    "PublishWithoutApproval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rename_shared_folders {
                properties.insert(
                    "RenameSharedFolders".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.research {
                properties.insert(
                    "Research".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.share_analyses {
                properties.insert(
                    "ShareAnalyses".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.share_dashboards {
                properties.insert(
                    "ShareDashboards".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.share_data_sources {
                properties.insert(
                    "ShareDataSources".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.share_datasets {
                properties.insert(
                    "ShareDatasets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.space {
                properties.insert("Space".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.subscribe_dashboard_email_reports {
                properties.insert(
                    "SubscribeDashboardEmailReports".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.use_agent_web_search {
                properties.insert(
                    "UseAgentWebSearch".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.use_bedrock_models {
                properties.insert(
                    "UseBedrockModels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.view_account_spice_capacity {
                properties.insert(
                    "ViewAccountSPICECapacity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
}
pub mod dashboard {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-adhocfilteringoption.html
    pub struct AdHocFilteringOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AdHocFilteringOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AdHocFilteringOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AdHocFilteringOption as AdHocFilteringOption;
    impl crate::value::ToValue for AdHocFilteringOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-aggregationfunction.html
    pub struct AggregationFunction_ {
        pub attribute_aggregation_function: Option<Box<AttributeAggregationFunction_>>,
        pub categorical_aggregation_function: Option<crate::value::ExpString>,
        pub date_aggregation_function: Option<crate::value::ExpString>,
        pub numerical_aggregation_function: Option<Box<NumericalAggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AggregationFunction as AggregationFunction;
    impl crate::value::ToValue for AggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.attribute_aggregation_function {
                properties.insert(
                    "AttributeAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categorical_aggregation_function {
                properties.insert(
                    "CategoricalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_aggregation_function {
                properties.insert(
                    "DateAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_aggregation_function {
                properties.insert(
                    "NumericalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-aggregationsortconfiguration.html
    pub struct AggregationSortConfiguration_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub sort_direction: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AggregationSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AggregationSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AggregationSortConfiguration as AggregationSortConfiguration;
    impl crate::value::ToValue for AggregationSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "SortDirection".to_string(),
                crate::value::ToValue::to_value(&self.sort_direction),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-analysisdefaults.html
    pub struct AnalysisDefaults_ {
        pub default_new_sheet_configuration: Box<DefaultNewSheetConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AnalysisDefaults {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AnalysisDefaults"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AnalysisDefaults as AnalysisDefaults;
    impl crate::value::ToValue for AnalysisDefaults_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DefaultNewSheetConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.default_new_sheet_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-anchordateconfiguration.html
    pub struct AnchorDateConfiguration_ {
        pub anchor_option: Option<crate::value::ExpString>,
        pub parameter_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AnchorDateConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AnchorDateConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AnchorDateConfiguration as AnchorDateConfiguration;
    impl crate::value::ToValue for AnchorDateConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.anchor_option {
                properties.insert(
                    "AnchorOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-arcaxisconfiguration.html
    pub struct ArcAxisConfiguration_ {
        pub range: Option<Box<ArcAxisDisplayRange_>>,
        pub reserve_range: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ArcAxisConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ArcAxisConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ArcAxisConfiguration as ArcAxisConfiguration;
    impl crate::value::ToValue for ArcAxisConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.range {
                properties.insert("Range".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.reserve_range {
                properties.insert(
                    "ReserveRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-arcaxisdisplayrange.html
    pub struct ArcAxisDisplayRange_ {
        pub max: Option<f64>,
        pub min: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ArcAxisDisplayRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ArcAxisDisplayRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ArcAxisDisplayRange as ArcAxisDisplayRange;
    impl crate::value::ToValue for ArcAxisDisplayRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.max {
                properties.insert("Max".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.min {
                properties.insert("Min".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-arcconfiguration.html
    pub struct ArcConfiguration_ {
        pub arc_angle: Option<f64>,
        pub arc_thickness: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ArcConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ArcConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ArcConfiguration as ArcConfiguration;
    impl crate::value::ToValue for ArcConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_angle {
                properties.insert(
                    "ArcAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.arc_thickness {
                properties.insert(
                    "ArcThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-arcoptions.html
    pub struct ArcOptions_ {
        pub arc_thickness: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ArcOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ArcOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ArcOptions as ArcOptions;
    impl crate::value::ToValue for ArcOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_thickness {
                properties.insert(
                    "ArcThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-assetoptions.html
    pub struct AssetOptions_ {
        pub excluded_data_set_arns: Option<Vec<crate::value::ExpString>>,
        pub q_business_insights_status: Option<crate::value::ExpString>,
        pub timezone: Option<crate::value::ExpString>,
        pub week_start: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AssetOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AssetOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AssetOptions as AssetOptions;
    impl crate::value::ToValue for AssetOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.excluded_data_set_arns {
                properties.insert(
                    "ExcludedDataSetArns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.q_business_insights_status {
                properties.insert(
                    "QBusinessInsightsStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.timezone {
                properties.insert(
                    "Timezone".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.week_start {
                properties.insert(
                    "WeekStart".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-attributeaggregationfunction.html
    pub struct AttributeAggregationFunction_ {
        pub simple_attribute_aggregation: Option<crate::value::ExpString>,
        pub value_for_multiple_values: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AttributeAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AttributeAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AttributeAggregationFunction as AttributeAggregationFunction;
    impl crate::value::ToValue for AttributeAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_attribute_aggregation {
                properties.insert(
                    "SimpleAttributeAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_for_multiple_values {
                properties.insert(
                    "ValueForMultipleValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axisdataoptions.html
    pub struct AxisDataOptions_ {
        pub date_axis_options: Option<Box<DateAxisOptions_>>,
        pub numeric_axis_options: Option<Box<NumericAxisOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisDataOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisDataOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisDataOptions as AxisDataOptions;
    impl crate::value::ToValue for AxisDataOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_axis_options {
                properties.insert(
                    "DateAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_axis_options {
                properties.insert(
                    "NumericAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axisdisplayminmaxrange.html
    pub struct AxisDisplayMinMaxRange_ {
        pub maximum: Option<f64>,
        pub minimum: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisDisplayMinMaxRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisDisplayMinMaxRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisDisplayMinMaxRange as AxisDisplayMinMaxRange;
    impl crate::value::ToValue for AxisDisplayMinMaxRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.maximum {
                properties.insert(
                    "Maximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum {
                properties.insert(
                    "Minimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axisdisplayoptions.html
    pub struct AxisDisplayOptions_ {
        pub axis_line_visibility: Option<crate::value::ExpString>,
        pub axis_offset: Option<crate::value::ExpString>,
        pub data_options: Option<Box<AxisDataOptions_>>,
        pub grid_line_visibility: Option<crate::value::ExpString>,
        pub scrollbar_options: Option<Box<ScrollBarOptions_>>,
        pub tick_label_options: Option<Box<AxisTickLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisDisplayOptions as AxisDisplayOptions;
    impl crate::value::ToValue for AxisDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_line_visibility {
                properties.insert(
                    "AxisLineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.axis_offset {
                properties.insert(
                    "AxisOffset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_options {
                properties.insert(
                    "DataOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid_line_visibility {
                properties.insert(
                    "GridLineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scrollbar_options {
                properties.insert(
                    "ScrollbarOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tick_label_options {
                properties.insert(
                    "TickLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axisdisplayrange.html
    pub struct AxisDisplayRange_ {
        pub data_driven: Option<serde_json::Value>,
        pub min_max: Option<Box<AxisDisplayMinMaxRange_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisDisplayRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisDisplayRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisDisplayRange as AxisDisplayRange;
    impl crate::value::ToValue for AxisDisplayRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_driven {
                properties.insert(
                    "DataDriven".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.min_max {
                properties.insert("MinMax".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axislabeloptions.html
    pub struct AxisLabelOptions_ {
        pub apply_to: Option<Box<AxisLabelReferenceOptions_>>,
        pub custom_label: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisLabelOptions as AxisLabelOptions;
    impl crate::value::ToValue for AxisLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.apply_to {
                properties.insert(
                    "ApplyTo".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axislabelreferenceoptions.html
    pub struct AxisLabelReferenceOptions_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisLabelReferenceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisLabelReferenceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisLabelReferenceOptions as AxisLabelReferenceOptions;
    impl crate::value::ToValue for AxisLabelReferenceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axislinearscale.html
    pub struct AxisLinearScale_ {
        pub step_count: Option<f64>,
        pub step_size: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisLinearScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisLinearScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisLinearScale as AxisLinearScale;
    impl crate::value::ToValue for AxisLinearScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.step_count {
                properties.insert(
                    "StepCount".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.step_size {
                properties.insert(
                    "StepSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axislogarithmicscale.html
    pub struct AxisLogarithmicScale_ {
        pub base: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisLogarithmicScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisLogarithmicScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisLogarithmicScale as AxisLogarithmicScale;
    impl crate::value::ToValue for AxisLogarithmicScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.base {
                properties.insert("Base".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axisscale.html
    pub struct AxisScale_ {
        pub linear: Option<Box<AxisLinearScale_>>,
        pub logarithmic: Option<Box<AxisLogarithmicScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisScale as AxisScale;
    impl crate::value::ToValue for AxisScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.linear {
                properties.insert("Linear".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.logarithmic {
                properties.insert(
                    "Logarithmic".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-axisticklabeloptions.html
    pub struct AxisTickLabelOptions_ {
        pub label_options: Option<Box<LabelOptions_>>,
        pub rotation_angle: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_AxisTickLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.AxisTickLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_AxisTickLabelOptions as AxisTickLabelOptions;
    impl crate::value::ToValue for AxisTickLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_options {
                properties.insert(
                    "LabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rotation_angle {
                properties.insert(
                    "RotationAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-barchartaggregatedfieldwells.html
    pub struct BarChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BarChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BarChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BarChartAggregatedFieldWells as BarChartAggregatedFieldWells;
    impl crate::value::ToValue for BarChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-barchartconfiguration.html
    pub struct BarChartConfiguration_ {
        pub bars_arrangement: Option<crate::value::ExpString>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<BarChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub orientation: Option<crate::value::ExpString>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<BarChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_axis: Option<Box<AxisDisplayOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BarChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BarChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BarChartConfiguration as BarChartConfiguration;
    impl crate::value::ToValue for BarChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bars_arrangement {
                properties.insert(
                    "BarsArrangement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.orientation {
                properties.insert(
                    "Orientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_axis {
                properties.insert(
                    "ValueAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-barchartfieldwells.html
    pub struct BarChartFieldWells_ {
        pub bar_chart_aggregated_field_wells: Option<Box<BarChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BarChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BarChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BarChartFieldWells as BarChartFieldWells;
    impl crate::value::ToValue for BarChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_chart_aggregated_field_wells {
                properties.insert(
                    "BarChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-barchartsortconfiguration.html
    pub struct BarChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BarChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BarChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BarChartSortConfiguration as BarChartSortConfiguration;
    impl crate::value::ToValue for BarChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-barchartvisual.html
    pub struct BarChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<BarChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BarChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BarChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BarChartVisual as BarChartVisual;
    impl crate::value::ToValue for BarChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bincountoptions.html
    pub struct BinCountOptions_ {
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BinCountOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BinCountOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BinCountOptions as BinCountOptions;
    impl crate::value::ToValue for BinCountOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-binwidthoptions.html
    pub struct BinWidthOptions_ {
        pub bin_count_limit: Option<f64>,
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BinWidthOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BinWidthOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BinWidthOptions as BinWidthOptions;
    impl crate::value::ToValue for BinWidthOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_count_limit {
                properties.insert(
                    "BinCountLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectionconfiguration.html
    pub struct BodySectionConfiguration_ {
        pub content: Box<BodySectionContent_>,
        pub page_break_configuration: Option<Box<SectionPageBreakConfiguration_>>,
        pub repeat_configuration: Option<Box<BodySectionRepeatConfiguration_>>,
        pub section_id: crate::value::ExpString,
        pub style: Option<Box<SectionStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionConfiguration as BodySectionConfiguration;
    impl crate::value::ToValue for BodySectionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Content".to_string(),
                crate::value::ToValue::to_value(&self.content),
            );
            if let Some(ref value) = self.page_break_configuration {
                properties.insert(
                    "PageBreakConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.repeat_configuration {
                properties.insert(
                    "RepeatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SectionId".to_string(),
                crate::value::ToValue::to_value(&self.section_id),
            );
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectioncontent.html
    pub struct BodySectionContent_ {
        pub layout: Option<Box<SectionLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionContent as BodySectionContent;
    impl crate::value::ToValue for BodySectionContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.layout {
                properties.insert("Layout".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectiondynamiccategorydimensionconfiguration.html
    pub struct BodySectionDynamicCategoryDimensionConfiguration_ {
        pub column: Box<ColumnIdentifier_>,
        pub limit: Option<f64>,
        pub sort_by_metrics: Option<Vec<ColumnSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionDynamicCategoryDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionDynamicCategoryDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionDynamicCategoryDimensionConfiguration as BodySectionDynamicCategoryDimensionConfiguration;
    impl crate::value::ToValue for BodySectionDynamicCategoryDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_by_metrics {
                properties.insert(
                    "SortByMetrics".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectiondynamicnumericdimensionconfiguration.html
    pub struct BodySectionDynamicNumericDimensionConfiguration_ {
        pub column: Box<ColumnIdentifier_>,
        pub limit: Option<f64>,
        pub sort_by_metrics: Option<Vec<ColumnSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionDynamicNumericDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionDynamicNumericDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionDynamicNumericDimensionConfiguration as BodySectionDynamicNumericDimensionConfiguration;
    impl crate::value::ToValue for BodySectionDynamicNumericDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_by_metrics {
                properties.insert(
                    "SortByMetrics".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectionrepeatconfiguration.html
    pub struct BodySectionRepeatConfiguration_ {
        pub dimension_configurations: Option<Vec<BodySectionRepeatDimensionConfiguration_>>,
        pub non_repeating_visuals: Option<Vec<crate::value::ExpString>>,
        pub page_break_configuration: Option<Box<BodySectionRepeatPageBreakConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionRepeatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionRepeatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionRepeatConfiguration as BodySectionRepeatConfiguration;
    impl crate::value::ToValue for BodySectionRepeatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dimension_configurations {
                properties.insert(
                    "DimensionConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.non_repeating_visuals {
                properties.insert(
                    "NonRepeatingVisuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.page_break_configuration {
                properties.insert(
                    "PageBreakConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectionrepeatdimensionconfiguration.html
    pub struct BodySectionRepeatDimensionConfiguration_ {
        pub dynamic_category_dimension_configuration:
            Option<Box<BodySectionDynamicCategoryDimensionConfiguration_>>,
        pub dynamic_numeric_dimension_configuration:
            Option<Box<BodySectionDynamicNumericDimensionConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionRepeatDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionRepeatDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionRepeatDimensionConfiguration as BodySectionRepeatDimensionConfiguration;
    impl crate::value::ToValue for BodySectionRepeatDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_category_dimension_configuration {
                properties.insert(
                    "DynamicCategoryDimensionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dynamic_numeric_dimension_configuration {
                properties.insert(
                    "DynamicNumericDimensionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-bodysectionrepeatpagebreakconfiguration.html
    pub struct BodySectionRepeatPageBreakConfiguration_ {
        pub after: Option<Box<SectionAfterPageBreak_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BodySectionRepeatPageBreakConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BodySectionRepeatPageBreakConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BodySectionRepeatPageBreakConfiguration as BodySectionRepeatPageBreakConfiguration;
    impl crate::value::ToValue for BodySectionRepeatPageBreakConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.after {
                properties.insert("After".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotaggregatedfieldwells.html
    pub struct BoxPlotAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotAggregatedFieldWells as BoxPlotAggregatedFieldWells;
    impl crate::value::ToValue for BoxPlotAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotchartconfiguration.html
    pub struct BoxPlotChartConfiguration_ {
        pub box_plot_options: Option<Box<BoxPlotOptions_>>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<BoxPlotFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub sort_configuration: Option<Box<BoxPlotSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotChartConfiguration as BoxPlotChartConfiguration;
    impl crate::value::ToValue for BoxPlotChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.box_plot_options {
                properties.insert(
                    "BoxPlotOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotfieldwells.html
    pub struct BoxPlotFieldWells_ {
        pub box_plot_aggregated_field_wells: Option<Box<BoxPlotAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotFieldWells as BoxPlotFieldWells;
    impl crate::value::ToValue for BoxPlotFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.box_plot_aggregated_field_wells {
                properties.insert(
                    "BoxPlotAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotoptions.html
    pub struct BoxPlotOptions_ {
        pub all_data_points_visibility: Option<crate::value::ExpString>,
        pub outlier_visibility: Option<crate::value::ExpString>,
        pub style_options: Option<Box<BoxPlotStyleOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotOptions as BoxPlotOptions;
    impl crate::value::ToValue for BoxPlotOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.all_data_points_visibility {
                properties.insert(
                    "AllDataPointsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.outlier_visibility {
                properties.insert(
                    "OutlierVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.style_options {
                properties.insert(
                    "StyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotsortconfiguration.html
    pub struct BoxPlotSortConfiguration_ {
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub pagination_configuration: Option<Box<PaginationConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotSortConfiguration as BoxPlotSortConfiguration;
    impl crate::value::ToValue for BoxPlotSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pagination_configuration {
                properties.insert(
                    "PaginationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotstyleoptions.html
    pub struct BoxPlotStyleOptions_ {
        pub fill_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotStyleOptions as BoxPlotStyleOptions;
    impl crate::value::ToValue for BoxPlotStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_style {
                properties.insert(
                    "FillStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-boxplotvisual.html
    pub struct BoxPlotVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<BoxPlotChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_BoxPlotVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.BoxPlotVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_BoxPlotVisual as BoxPlotVisual;
    impl crate::value::ToValue for BoxPlotVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-calculatedfield.html
    pub struct CalculatedField_ {
        pub data_set_identifier: crate::value::ExpString,
        pub expression: crate::value::ExpString,
        pub name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CalculatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CalculatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CalculatedField as CalculatedField;
    impl crate::value::ToValue for CalculatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-calculatedmeasurefield.html
    pub struct CalculatedMeasureField_ {
        pub expression: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CalculatedMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CalculatedMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CalculatedMeasureField as CalculatedMeasureField;
    impl crate::value::ToValue for CalculatedMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-cascadingcontrolconfiguration.html
    pub struct CascadingControlConfiguration_ {
        pub source_controls: Option<Vec<CascadingControlSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CascadingControlConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CascadingControlConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CascadingControlConfiguration as CascadingControlConfiguration;
    impl crate::value::ToValue for CascadingControlConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source_controls {
                properties.insert(
                    "SourceControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-cascadingcontrolsource.html
    pub struct CascadingControlSource_ {
        pub column_to_match: Option<Box<ColumnIdentifier_>>,
        pub source_sheet_control_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CascadingControlSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CascadingControlSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CascadingControlSource as CascadingControlSource;
    impl crate::value::ToValue for CascadingControlSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_to_match {
                properties.insert(
                    "ColumnToMatch".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_sheet_control_id {
                properties.insert(
                    "SourceSheetControlId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-categoricaldimensionfield.html
    pub struct CategoricalDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<StringFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CategoricalDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CategoricalDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CategoricalDimensionField as CategoricalDimensionField;
    impl crate::value::ToValue for CategoricalDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-categoricalmeasurefield.html
    pub struct CategoricalMeasureField_ {
        pub aggregation_function: Option<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<StringFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CategoricalMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CategoricalMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CategoricalMeasureField as CategoricalMeasureField;
    impl crate::value::ToValue for CategoricalMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-categorydrilldownfilter.html
    pub struct CategoryDrillDownFilter_ {
        pub category_values: Vec<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CategoryDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CategoryDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CategoryDrillDownFilter as CategoryDrillDownFilter;
    impl crate::value::ToValue for CategoryDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CategoryValues".to_string(),
                crate::value::ToValue::to_value(&self.category_values),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-categoryfilter.html
    pub struct CategoryFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub configuration: Box<CategoryFilterConfiguration_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CategoryFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CategoryFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CategoryFilter as CategoryFilter;
    impl crate::value::ToValue for CategoryFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-categoryfilterconfiguration.html
    pub struct CategoryFilterConfiguration_ {
        pub custom_filter_configuration: Option<Box<CustomFilterConfiguration_>>,
        pub custom_filter_list_configuration: Option<Box<CustomFilterListConfiguration_>>,
        pub filter_list_configuration: Option<Box<FilterListConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CategoryFilterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CategoryFilterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CategoryFilterConfiguration as CategoryFilterConfiguration;
    impl crate::value::ToValue for CategoryFilterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_filter_configuration {
                properties.insert(
                    "CustomFilterConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_filter_list_configuration {
                properties.insert(
                    "CustomFilterListConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_list_configuration {
                properties.insert(
                    "FilterListConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-categoryinnerfilter.html
    pub struct CategoryInnerFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub configuration: Box<CategoryFilterConfiguration_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CategoryInnerFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CategoryInnerFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CategoryInnerFilter as CategoryInnerFilter;
    impl crate::value::ToValue for CategoryInnerFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-chartaxislabeloptions.html
    pub struct ChartAxisLabelOptions_ {
        pub axis_label_options: Option<Vec<AxisLabelOptions_>>,
        pub sort_icon_visibility: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ChartAxisLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ChartAxisLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ChartAxisLabelOptions as ChartAxisLabelOptions;
    impl crate::value::ToValue for ChartAxisLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_label_options {
                properties.insert(
                    "AxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_icon_visibility {
                properties.insert(
                    "SortIconVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-clustermarker.html
    pub struct ClusterMarker_ {
        pub simple_cluster_marker: Option<Box<SimpleClusterMarker_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ClusterMarker {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ClusterMarker"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ClusterMarker as ClusterMarker;
    impl crate::value::ToValue for ClusterMarker_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_cluster_marker {
                properties.insert(
                    "SimpleClusterMarker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-clustermarkerconfiguration.html
    pub struct ClusterMarkerConfiguration_ {
        pub cluster_marker: Option<Box<ClusterMarker_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ClusterMarkerConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ClusterMarkerConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ClusterMarkerConfiguration as ClusterMarkerConfiguration;
    impl crate::value::ToValue for ClusterMarkerConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_marker {
                properties.insert(
                    "ClusterMarker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-colorscale.html
    pub struct ColorScale_ {
        pub color_fill_type: crate::value::ExpString,
        pub colors: Vec<DataColor_>,
        pub null_value_color: Option<Box<DataColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColorScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColorScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColorScale as ColorScale;
    impl crate::value::ToValue for ColorScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColorFillType".to_string(),
                crate::value::ToValue::to_value(&self.color_fill_type),
            );
            properties.insert(
                "Colors".to_string(),
                crate::value::ToValue::to_value(&self.colors),
            );
            if let Some(ref value) = self.null_value_color {
                properties.insert(
                    "NullValueColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-colorsconfiguration.html
    pub struct ColorsConfiguration_ {
        pub custom_colors: Option<Vec<CustomColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColorsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColorsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColorsConfiguration as ColorsConfiguration;
    impl crate::value::ToValue for ColorsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_colors {
                properties.insert(
                    "CustomColors".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-columnconfiguration.html
    pub struct ColumnConfiguration_ {
        pub colors_configuration: Option<Box<ColorsConfiguration_>>,
        pub column: Box<ColumnIdentifier_>,
        pub format_configuration: Option<Box<FormatConfiguration_>>,
        pub role: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColumnConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColumnConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColumnConfiguration as ColumnConfiguration;
    impl crate::value::ToValue for ColumnConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors_configuration {
                properties.insert(
                    "ColorsConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.role {
                properties.insert("Role".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-columnhierarchy.html
    pub struct ColumnHierarchy_ {
        pub date_time_hierarchy: Option<Box<DateTimeHierarchy_>>,
        pub explicit_hierarchy: Option<Box<ExplicitHierarchy_>>,
        pub predefined_hierarchy: Option<Box<PredefinedHierarchy_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColumnHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColumnHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColumnHierarchy as ColumnHierarchy;
    impl crate::value::ToValue for ColumnHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_hierarchy {
                properties.insert(
                    "DateTimeHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.explicit_hierarchy {
                properties.insert(
                    "ExplicitHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.predefined_hierarchy {
                properties.insert(
                    "PredefinedHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-columnidentifier.html
    pub struct ColumnIdentifier_ {
        pub column_name: crate::value::ExpString,
        pub data_set_identifier: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColumnIdentifier {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColumnIdentifier"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColumnIdentifier as ColumnIdentifier;
    impl crate::value::ToValue for ColumnIdentifier_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-columnsort.html
    pub struct ColumnSort_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub direction: crate::value::ExpString,
        pub sort_by: Box<ColumnIdentifier_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColumnSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColumnSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColumnSort as ColumnSort;
    impl crate::value::ToValue for ColumnSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "SortBy".to_string(),
                crate::value::ToValue::to_value(&self.sort_by),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-columntooltipitem.html
    pub struct ColumnTooltipItem_ {
        pub aggregation: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub label: Option<crate::value::ExpString>,
        pub tooltip_target: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ColumnTooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ColumnTooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ColumnTooltipItem as ColumnTooltipItem;
    impl crate::value::ToValue for ColumnTooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_target {
                properties.insert(
                    "TooltipTarget".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-combochartaggregatedfieldwells.html
    pub struct ComboChartAggregatedFieldWells_ {
        pub bar_values: Option<Vec<MeasureField_>>,
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub line_values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComboChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComboChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComboChartAggregatedFieldWells as ComboChartAggregatedFieldWells;
    impl crate::value::ToValue for ComboChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_values {
                properties.insert(
                    "BarValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.line_values {
                properties.insert(
                    "LineValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-combochartconfiguration.html
    pub struct ComboChartConfiguration_ {
        pub bar_data_labels: Option<Box<DataLabelOptions_>>,
        pub bars_arrangement: Option<crate::value::ExpString>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<ComboChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub line_data_labels: Option<Box<DataLabelOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub secondary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub secondary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub single_axis_options: Option<Box<SingleAxisOptions_>>,
        pub sort_configuration: Option<Box<ComboChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComboChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComboChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComboChartConfiguration as ComboChartConfiguration;
    impl crate::value::ToValue for ComboChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_data_labels {
                properties.insert(
                    "BarDataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.bars_arrangement {
                properties.insert(
                    "BarsArrangement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.line_data_labels {
                properties.insert(
                    "LineDataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_display_options {
                properties.insert(
                    "SecondaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_label_options {
                properties.insert(
                    "SecondaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.single_axis_options {
                properties.insert(
                    "SingleAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-combochartfieldwells.html
    pub struct ComboChartFieldWells_ {
        pub combo_chart_aggregated_field_wells: Option<Box<ComboChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComboChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComboChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComboChartFieldWells as ComboChartFieldWells;
    impl crate::value::ToValue for ComboChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.combo_chart_aggregated_field_wells {
                properties.insert(
                    "ComboChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-combochartsortconfiguration.html
    pub struct ComboChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComboChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComboChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComboChartSortConfiguration as ComboChartSortConfiguration;
    impl crate::value::ToValue for ComboChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-combochartvisual.html
    pub struct ComboChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<ComboChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComboChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComboChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComboChartVisual as ComboChartVisual;
    impl crate::value::ToValue for ComboChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-comparisonconfiguration.html
    pub struct ComparisonConfiguration_ {
        pub comparison_format: Option<Box<ComparisonFormatConfiguration_>>,
        pub comparison_method: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComparisonConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComparisonConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComparisonConfiguration as ComparisonConfiguration;
    impl crate::value::ToValue for ComparisonConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.comparison_format {
                properties.insert(
                    "ComparisonFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_method {
                properties.insert(
                    "ComparisonMethod".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-comparisonformatconfiguration.html
    pub struct ComparisonFormatConfiguration_ {
        pub number_display_format_configuration: Option<Box<NumberDisplayFormatConfiguration_>>,
        pub percentage_display_format_configuration:
            Option<Box<PercentageDisplayFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ComparisonFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ComparisonFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ComparisonFormatConfiguration as ComparisonFormatConfiguration;
    impl crate::value::ToValue for ComparisonFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.number_display_format_configuration {
                properties.insert(
                    "NumberDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentage_display_format_configuration {
                properties.insert(
                    "PercentageDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-computation.html
    pub struct Computation_ {
        pub forecast: Option<Box<ForecastComputation_>>,
        pub growth_rate: Option<Box<GrowthRateComputation_>>,
        pub maximum_minimum: Option<Box<MaximumMinimumComputation_>>,
        pub metric_comparison: Option<Box<MetricComparisonComputation_>>,
        pub period_over_period: Option<Box<PeriodOverPeriodComputation_>>,
        pub period_to_date: Option<Box<PeriodToDateComputation_>>,
        pub top_bottom_movers: Option<Box<TopBottomMoversComputation_>>,
        pub top_bottom_ranked: Option<Box<TopBottomRankedComputation_>>,
        pub total_aggregation: Option<Box<TotalAggregationComputation_>>,
        pub unique_values: Option<Box<UniqueValuesComputation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Computation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Computation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Computation as Computation;
    impl crate::value::ToValue for Computation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.forecast {
                properties.insert(
                    "Forecast".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.growth_rate {
                properties.insert(
                    "GrowthRate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_minimum {
                properties.insert(
                    "MaximumMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_comparison {
                properties.insert(
                    "MetricComparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.period_over_period {
                properties.insert(
                    "PeriodOverPeriod".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.period_to_date {
                properties.insert(
                    "PeriodToDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_movers {
                properties.insert(
                    "TopBottomMovers".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_ranked {
                properties.insert(
                    "TopBottomRanked".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation {
                properties.insert(
                    "TotalAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unique_values {
                properties.insert(
                    "UniqueValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingcolor.html
    pub struct ConditionalFormattingColor_ {
        pub gradient: Option<Box<ConditionalFormattingGradientColor_>>,
        pub solid: Option<Box<ConditionalFormattingSolidColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingColor as ConditionalFormattingColor;
    impl crate::value::ToValue for ConditionalFormattingColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.gradient {
                properties.insert(
                    "Gradient".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.solid {
                properties.insert("Solid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingcustomiconcondition.html
    pub struct ConditionalFormattingCustomIconCondition_ {
        pub color: Option<crate::value::ExpString>,
        pub display_configuration: Option<Box<ConditionalFormattingIconDisplayConfiguration_>>,
        pub expression: crate::value::ExpString,
        pub icon_options: Box<ConditionalFormattingCustomIconOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingCustomIconCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingCustomIconCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingCustomIconCondition as ConditionalFormattingCustomIconCondition;
    impl crate::value::ToValue for ConditionalFormattingCustomIconCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.display_configuration {
                properties.insert(
                    "DisplayConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "IconOptions".to_string(),
                crate::value::ToValue::to_value(&self.icon_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingcustomiconoptions.html
    pub struct ConditionalFormattingCustomIconOptions_ {
        pub icon: Option<crate::value::ExpString>,
        pub unicode_icon: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingCustomIconOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingCustomIconOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingCustomIconOptions as ConditionalFormattingCustomIconOptions;
    impl crate::value::ToValue for ConditionalFormattingCustomIconOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.unicode_icon {
                properties.insert(
                    "UnicodeIcon".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattinggradientcolor.html
    pub struct ConditionalFormattingGradientColor_ {
        pub color: Box<GradientColor_>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingGradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingGradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingGradientColor as ConditionalFormattingGradientColor;
    impl crate::value::ToValue for ConditionalFormattingGradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingicon.html
    pub struct ConditionalFormattingIcon_ {
        pub custom_condition: Option<Box<ConditionalFormattingCustomIconCondition_>>,
        pub icon_set: Option<Box<ConditionalFormattingIconSet_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingIcon {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingIcon"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingIcon as ConditionalFormattingIcon;
    impl crate::value::ToValue for ConditionalFormattingIcon_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_condition {
                properties.insert(
                    "CustomCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.icon_set {
                properties.insert(
                    "IconSet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingicondisplayconfiguration.html
    pub struct ConditionalFormattingIconDisplayConfiguration_ {
        pub icon_display_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingIconDisplayConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingIconDisplayConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingIconDisplayConfiguration as ConditionalFormattingIconDisplayConfiguration;
    impl crate::value::ToValue for ConditionalFormattingIconDisplayConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon_display_option {
                properties.insert(
                    "IconDisplayOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingiconset.html
    pub struct ConditionalFormattingIconSet_ {
        pub expression: crate::value::ExpString,
        pub icon_set_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingIconSet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingIconSet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingIconSet as ConditionalFormattingIconSet;
    impl crate::value::ToValue for ConditionalFormattingIconSet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            if let Some(ref value) = self.icon_set_type {
                properties.insert(
                    "IconSetType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-conditionalformattingsolidcolor.html
    pub struct ConditionalFormattingSolidColor_ {
        pub color: Option<crate::value::ExpString>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ConditionalFormattingSolidColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ConditionalFormattingSolidColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ConditionalFormattingSolidColor as ConditionalFormattingSolidColor;
    impl crate::value::ToValue for ConditionalFormattingSolidColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-contextmenuoption.html
    pub struct ContextMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ContextMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ContextMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ContextMenuOption as ContextMenuOption;
    impl crate::value::ToValue for ContextMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-contributionanalysisdefault.html
    pub struct ContributionAnalysisDefault_ {
        pub contributor_dimensions: Vec<ColumnIdentifier_>,
        pub measure_field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ContributionAnalysisDefault {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ContributionAnalysisDefault"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ContributionAnalysisDefault as ContributionAnalysisDefault;
    impl crate::value::ToValue for ContributionAnalysisDefault_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ContributorDimensions".to_string(),
                crate::value::ToValue::to_value(&self.contributor_dimensions),
            );
            properties.insert(
                "MeasureFieldId".to_string(),
                crate::value::ToValue::to_value(&self.measure_field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-currencydisplayformatconfiguration.html
    pub struct CurrencyDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub number_scale: Option<crate::value::ExpString>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
        pub symbol: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CurrencyDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CurrencyDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CurrencyDisplayFormatConfiguration as CurrencyDisplayFormatConfiguration;
    impl crate::value::ToValue for CurrencyDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_scale {
                properties.insert(
                    "NumberScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.symbol {
                properties.insert("Symbol".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customactionfilteroperation.html
    pub struct CustomActionFilterOperation_ {
        pub selected_fields_configuration: Box<FilterOperationSelectedFieldsConfiguration_>,
        pub target_visuals_configuration: Box<FilterOperationTargetVisualsConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomActionFilterOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomActionFilterOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomActionFilterOperation as CustomActionFilterOperation;
    impl crate::value::ToValue for CustomActionFilterOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "SelectedFieldsConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.selected_fields_configuration),
            );
            properties.insert(
                "TargetVisualsConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.target_visuals_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customactionnavigationoperation.html
    pub struct CustomActionNavigationOperation_ {
        pub local_navigation_configuration: Option<Box<LocalNavigationConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomActionNavigationOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomActionNavigationOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomActionNavigationOperation as CustomActionNavigationOperation;
    impl crate::value::ToValue for CustomActionNavigationOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.local_navigation_configuration {
                properties.insert(
                    "LocalNavigationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customactionsetparametersoperation.html
    pub struct CustomActionSetParametersOperation_ {
        pub parameter_value_configurations: Vec<SetParameterValueConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomActionSetParametersOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomActionSetParametersOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomActionSetParametersOperation as CustomActionSetParametersOperation;
    impl crate::value::ToValue for CustomActionSetParametersOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ParameterValueConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_configurations),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customactionurloperation.html
    pub struct CustomActionURLOperation_ {
        pub url_target: crate::value::ExpString,
        pub url_template: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomActionURLOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomActionURLOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomActionURLOperation as CustomActionURLOperation;
    impl crate::value::ToValue for CustomActionURLOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "URLTarget".to_string(),
                crate::value::ToValue::to_value(&self.url_target),
            );
            properties.insert(
                "URLTemplate".to_string(),
                crate::value::ToValue::to_value(&self.url_template),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customcolor.html
    pub struct CustomColor_ {
        pub color: crate::value::ExpString,
        pub field_value: Option<crate::value::ExpString>,
        pub special_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomColor as CustomColor;
    impl crate::value::ToValue for CustomColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.special_value {
                properties.insert(
                    "SpecialValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customcontentconfiguration.html
    pub struct CustomContentConfiguration_ {
        pub content_type: Option<crate::value::ExpString>,
        pub content_url: Option<crate::value::ExpString>,
        pub image_scaling: Option<crate::value::ExpString>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomContentConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomContentConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomContentConfiguration as CustomContentConfiguration;
    impl crate::value::ToValue for CustomContentConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content_type {
                properties.insert(
                    "ContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.content_url {
                properties.insert(
                    "ContentUrl".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.image_scaling {
                properties.insert(
                    "ImageScaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customcontentvisual.html
    pub struct CustomContentVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<CustomContentConfiguration_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomContentVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomContentVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomContentVisual as CustomContentVisual;
    impl crate::value::ToValue for CustomContentVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customfilterconfiguration.html
    pub struct CustomFilterConfiguration_ {
        pub category_value: Option<crate::value::ExpString>,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomFilterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomFilterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomFilterConfiguration as CustomFilterConfiguration;
    impl crate::value::ToValue for CustomFilterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_value {
                properties.insert(
                    "CategoryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customfilterlistconfiguration.html
    pub struct CustomFilterListConfiguration_ {
        pub category_values: Option<Vec<crate::value::ExpString>>,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomFilterListConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomFilterListConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomFilterListConfiguration as CustomFilterListConfiguration;
    impl crate::value::ToValue for CustomFilterListConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_values {
                properties.insert(
                    "CategoryValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customnarrativeoptions.html
    pub struct CustomNarrativeOptions_ {
        pub narrative: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomNarrativeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomNarrativeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomNarrativeOptions as CustomNarrativeOptions;
    impl crate::value::ToValue for CustomNarrativeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Narrative".to_string(),
                crate::value::ToValue::to_value(&self.narrative),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customparametervalues.html
    pub struct CustomParameterValues_ {
        pub date_time_values: Option<Vec<crate::value::ExpString>>,
        pub decimal_values: Option<Vec<f64>>,
        pub integer_values: Option<Vec<f64>>,
        pub string_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomParameterValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomParameterValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomParameterValues as CustomParameterValues;
    impl crate::value::ToValue for CustomParameterValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_values {
                properties.insert(
                    "DateTimeValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_values {
                properties.insert(
                    "DecimalValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_values {
                properties.insert(
                    "IntegerValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_values {
                properties.insert(
                    "StringValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-customvaluesconfiguration.html
    pub struct CustomValuesConfiguration_ {
        pub custom_values: Box<CustomParameterValues_>,
        pub include_null_value: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_CustomValuesConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.CustomValuesConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_CustomValuesConfiguration as CustomValuesConfiguration;
    impl crate::value::ToValue for CustomValuesConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomValues".to_string(),
                crate::value::ToValue::to_value(&self.custom_values),
            );
            if let Some(ref value) = self.include_null_value {
                properties.insert(
                    "IncludeNullValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboarderror.html
    pub struct DashboardError_ {
        pub message: Option<crate::value::ExpString>,
        pub r#type: Option<crate::value::ExpString>,
        pub violated_entities: Option<Vec<Entity_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardError {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardError"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardError as DashboardError;
    impl crate::value::ToValue for DashboardError_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.message {
                properties.insert(
                    "Message".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.violated_entities {
                properties.insert(
                    "ViolatedEntities".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardpublishoptions.html
    pub struct DashboardPublishOptions_ {
        pub ad_hoc_filtering_option: Option<Box<AdHocFilteringOption_>>,
        pub data_point_drill_up_down_option: Option<Box<DataPointDrillUpDownOption_>>,
        pub data_point_menu_label_option: Option<Box<DataPointMenuLabelOption_>>,
        pub data_point_tooltip_option: Option<Box<DataPointTooltipOption_>>,
        pub data_qa_enabled_option: Option<Box<DataQAEnabledOption_>>,
        pub data_stories_sharing_option: Option<Box<DataStoriesSharingOption_>>,
        pub executive_summary_option: Option<Box<ExecutiveSummaryOption_>>,
        pub export_to_csv_option: Option<Box<ExportToCSVOption_>>,
        pub export_with_hidden_fields_option: Option<Box<ExportWithHiddenFieldsOption_>>,
        pub quick_suite_actions_option: Option<Box<QuickSuiteActionsOption_>>,
        pub sheet_controls_option: Option<Box<SheetControlsOption_>>,
        pub sheet_layout_element_maximization_option:
            Option<Box<SheetLayoutElementMaximizationOption_>>,
        pub visual_axis_sort_option: Option<Box<VisualAxisSortOption_>>,
        pub visual_menu_option: Option<Box<VisualMenuOption_>>,
        pub visual_publish_options: Option<Box<DashboardVisualPublishOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardPublishOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardPublishOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardPublishOptions as DashboardPublishOptions;
    impl crate::value::ToValue for DashboardPublishOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.ad_hoc_filtering_option {
                properties.insert(
                    "AdHocFilteringOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_point_drill_up_down_option {
                properties.insert(
                    "DataPointDrillUpDownOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_point_menu_label_option {
                properties.insert(
                    "DataPointMenuLabelOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_point_tooltip_option {
                properties.insert(
                    "DataPointTooltipOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_qa_enabled_option {
                properties.insert(
                    "DataQAEnabledOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_stories_sharing_option {
                properties.insert(
                    "DataStoriesSharingOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.executive_summary_option {
                properties.insert(
                    "ExecutiveSummaryOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_to_csv_option {
                properties.insert(
                    "ExportToCSVOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.export_with_hidden_fields_option {
                properties.insert(
                    "ExportWithHiddenFieldsOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.quick_suite_actions_option {
                properties.insert(
                    "QuickSuiteActionsOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_controls_option {
                properties.insert(
                    "SheetControlsOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_layout_element_maximization_option {
                properties.insert(
                    "SheetLayoutElementMaximizationOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_axis_sort_option {
                properties.insert(
                    "VisualAxisSortOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_menu_option {
                properties.insert(
                    "VisualMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_publish_options {
                properties.insert(
                    "VisualPublishOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardsourceentity.html
    pub struct DashboardSourceEntity_ {
        pub source_template: Option<Box<DashboardSourceTemplate_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardSourceEntity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardSourceEntity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardSourceEntity as DashboardSourceEntity;
    impl crate::value::ToValue for DashboardSourceEntity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source_template {
                properties.insert(
                    "SourceTemplate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardsourcetemplate.html
    pub struct DashboardSourceTemplate_ {
        pub arn: crate::value::ExpString,
        pub data_set_references: Vec<DataSetReference_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardSourceTemplate {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardSourceTemplate"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardSourceTemplate as DashboardSourceTemplate;
    impl crate::value::ToValue for DashboardSourceTemplate_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Arn".to_string(),
                crate::value::ToValue::to_value(&self.arn),
            );
            properties.insert(
                "DataSetReferences".to_string(),
                crate::value::ToValue::to_value(&self.data_set_references),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html
    pub struct DashboardVersion_ {
        pub arn: Option<crate::value::ExpString>,
        pub created_time: Option<crate::value::ExpString>,
        pub data_set_arns: Option<Vec<crate::value::ExpString>>,
        pub description: Option<crate::value::ExpString>,
        pub errors: Option<Vec<DashboardError_>>,
        pub sheets: Option<Vec<Sheet_>>,
        pub source_entity_arn: Option<crate::value::ExpString>,
        pub status: Option<crate::value::ExpString>,
        pub theme_arn: Option<crate::value::ExpString>,
        pub version_number: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardVersion {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardVersion"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardVersion as DashboardVersion;
    impl crate::value::ToValue for DashboardVersion_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arn {
                properties.insert("Arn".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.created_time {
                properties.insert(
                    "CreatedTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_set_arns {
                properties.insert(
                    "DataSetArns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.errors {
                properties.insert("Errors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sheets {
                properties.insert("Sheets".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.source_entity_arn {
                properties.insert(
                    "SourceEntityArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.theme_arn {
                properties.insert(
                    "ThemeArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.version_number {
                properties.insert(
                    "VersionNumber".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversiondefinition.html
    pub struct DashboardVersionDefinition_ {
        pub analysis_defaults: Option<Box<AnalysisDefaults_>>,
        pub calculated_fields: Option<Vec<CalculatedField_>>,
        pub column_configurations: Option<Vec<ColumnConfiguration_>>,
        pub data_set_identifier_declarations: Vec<DataSetIdentifierDeclaration_>,
        pub filter_groups: Option<Vec<FilterGroup_>>,
        pub options: Option<Box<AssetOptions_>>,
        pub parameter_declarations: Option<Vec<ParameterDeclaration_>>,
        pub sheets: Option<Vec<SheetDefinition_>>,
        pub static_files: Option<Vec<StaticFile_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardVersionDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardVersionDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardVersionDefinition as DashboardVersionDefinition;
    impl crate::value::ToValue for DashboardVersionDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.analysis_defaults {
                properties.insert(
                    "AnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.calculated_fields {
                properties.insert(
                    "CalculatedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_configurations {
                properties.insert(
                    "ColumnConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifierDeclarations".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier_declarations),
            );
            if let Some(ref value) = self.filter_groups {
                properties.insert(
                    "FilterGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.options {
                properties.insert(
                    "Options".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.parameter_declarations {
                properties.insert(
                    "ParameterDeclarations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheets {
                properties.insert("Sheets".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.static_files {
                properties.insert(
                    "StaticFiles".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardvisualpublishoptions.html
    pub struct DashboardVisualPublishOptions_ {
        pub export_hidden_fields_option: Option<Box<ExportHiddenFieldsOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DashboardVisualPublishOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DashboardVisualPublishOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DashboardVisualPublishOptions as DashboardVisualPublishOptions;
    impl crate::value::ToValue for DashboardVisualPublishOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.export_hidden_fields_option {
                properties.insert(
                    "ExportHiddenFieldsOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-databarsoptions.html
    pub struct DataBarsOptions_ {
        pub field_id: crate::value::ExpString,
        pub negative_color: Option<crate::value::ExpString>,
        pub positive_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataBarsOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataBarsOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataBarsOptions as DataBarsOptions;
    impl crate::value::ToValue for DataBarsOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.negative_color {
                properties.insert(
                    "NegativeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.positive_color {
                properties.insert(
                    "PositiveColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datacolor.html
    pub struct DataColor_ {
        pub color: Option<crate::value::ExpString>,
        pub data_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataColor as DataColor;
    impl crate::value::ToValue for DataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_value {
                properties.insert(
                    "DataValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datafieldseriesitem.html
    pub struct DataFieldSeriesItem_ {
        pub axis_binding: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
        pub field_value: Option<crate::value::ExpString>,
        pub settings: Option<Box<LineChartSeriesSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataFieldSeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataFieldSeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataFieldSeriesItem as DataFieldSeriesItem;
    impl crate::value::ToValue for DataFieldSeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AxisBinding".to_string(),
                crate::value::ToValue::to_value(&self.axis_binding),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.settings {
                properties.insert(
                    "Settings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datalabeloptions.html
    pub struct DataLabelOptions_ {
        pub category_label_visibility: Option<crate::value::ExpString>,
        pub data_label_types: Option<Vec<DataLabelType_>>,
        pub label_color: Option<crate::value::ExpString>,
        pub label_content: Option<crate::value::ExpString>,
        pub label_font_configuration: Option<Box<FontConfiguration_>>,
        pub measure_label_visibility: Option<crate::value::ExpString>,
        pub overlap: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub totals_visibility: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataLabelOptions as DataLabelOptions;
    impl crate::value::ToValue for DataLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_visibility {
                properties.insert(
                    "CategoryLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_label_types {
                properties.insert(
                    "DataLabelTypes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_color {
                properties.insert(
                    "LabelColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_content {
                properties.insert(
                    "LabelContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_font_configuration {
                properties.insert(
                    "LabelFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_label_visibility {
                properties.insert(
                    "MeasureLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.overlap {
                properties.insert(
                    "Overlap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datalabeltype.html
    pub struct DataLabelType_ {
        pub data_path_label_type: Option<Box<DataPathLabelType_>>,
        pub field_label_type: Option<Box<FieldLabelType_>>,
        pub maximum_label_type: Option<Box<MaximumLabelType_>>,
        pub minimum_label_type: Option<Box<MinimumLabelType_>>,
        pub range_ends_label_type: Option<Box<RangeEndsLabelType_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataLabelType as DataLabelType;
    impl crate::value::ToValue for DataLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_path_label_type {
                properties.insert(
                    "DataPathLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_label_type {
                properties.insert(
                    "FieldLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_label_type {
                properties.insert(
                    "MaximumLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum_label_type {
                properties.insert(
                    "MinimumLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_ends_label_type {
                properties.insert(
                    "RangeEndsLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapathcolor.html
    pub struct DataPathColor_ {
        pub color: crate::value::ExpString,
        pub element: Box<DataPathValue_>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPathColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPathColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPathColor as DataPathColor;
    impl crate::value::ToValue for DataPathColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "Element".to_string(),
                crate::value::ToValue::to_value(&self.element),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapathlabeltype.html
    pub struct DataPathLabelType_ {
        pub field_id: Option<crate::value::ExpString>,
        pub field_value: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPathLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPathLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPathLabelType as DataPathLabelType;
    impl crate::value::ToValue for DataPathLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapathsort.html
    pub struct DataPathSort_ {
        pub direction: crate::value::ExpString,
        pub sort_paths: Vec<DataPathValue_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPathSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPathSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPathSort as DataPathSort;
    impl crate::value::ToValue for DataPathSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "SortPaths".to_string(),
                crate::value::ToValue::to_value(&self.sort_paths),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapathtype.html
    pub struct DataPathType_ {
        pub pivot_table_data_path_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPathType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPathType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPathType as DataPathType;
    impl crate::value::ToValue for DataPathType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pivot_table_data_path_type {
                properties.insert(
                    "PivotTableDataPathType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapathvalue.html
    pub struct DataPathValue_ {
        pub data_path_type: Option<Box<DataPathType_>>,
        pub field_id: Option<crate::value::ExpString>,
        pub field_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPathValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPathValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPathValue as DataPathValue;
    impl crate::value::ToValue for DataPathValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_path_type {
                properties.insert(
                    "DataPathType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapointdrillupdownoption.html
    pub struct DataPointDrillUpDownOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPointDrillUpDownOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPointDrillUpDownOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPointDrillUpDownOption as DataPointDrillUpDownOption;
    impl crate::value::ToValue for DataPointDrillUpDownOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapointmenulabeloption.html
    pub struct DataPointMenuLabelOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPointMenuLabelOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPointMenuLabelOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPointMenuLabelOption as DataPointMenuLabelOption;
    impl crate::value::ToValue for DataPointMenuLabelOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datapointtooltipoption.html
    pub struct DataPointTooltipOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataPointTooltipOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataPointTooltipOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataPointTooltipOption as DataPointTooltipOption;
    impl crate::value::ToValue for DataPointTooltipOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dataqaenabledoption.html
    pub struct DataQAEnabledOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataQAEnabledOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataQAEnabledOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataQAEnabledOption as DataQAEnabledOption;
    impl crate::value::ToValue for DataQAEnabledOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datasetidentifierdeclaration.html
    pub struct DataSetIdentifierDeclaration_ {
        pub data_set_arn: crate::value::ExpString,
        pub identifier: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataSetIdentifierDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataSetIdentifierDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataSetIdentifierDeclaration as DataSetIdentifierDeclaration;
    impl crate::value::ToValue for DataSetIdentifierDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetArn".to_string(),
                crate::value::ToValue::to_value(&self.data_set_arn),
            );
            properties.insert(
                "Identifier".to_string(),
                crate::value::ToValue::to_value(&self.identifier),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datasetreference.html
    pub struct DataSetReference_ {
        pub data_set_arn: crate::value::ExpString,
        pub data_set_placeholder: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataSetReference {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataSetReference"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataSetReference as DataSetReference;
    impl crate::value::ToValue for DataSetReference_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetArn".to_string(),
                crate::value::ToValue::to_value(&self.data_set_arn),
            );
            properties.insert(
                "DataSetPlaceholder".to_string(),
                crate::value::ToValue::to_value(&self.data_set_placeholder),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datastoriessharingoption.html
    pub struct DataStoriesSharingOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DataStoriesSharingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DataStoriesSharingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DataStoriesSharingOption as DataStoriesSharingOption;
    impl crate::value::ToValue for DataStoriesSharingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dateaxisoptions.html
    pub struct DateAxisOptions_ {
        pub missing_date_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateAxisOptions as DateAxisOptions;
    impl crate::value::ToValue for DateAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.missing_date_visibility {
                properties.insert(
                    "MissingDateVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datedimensionfield.html
    pub struct DateDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub date_granularity: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateDimensionField as DateDimensionField;
    impl crate::value::ToValue for DateDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.date_granularity {
                properties.insert(
                    "DateGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datemeasurefield.html
    pub struct DateMeasureField_ {
        pub aggregation_function: Option<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateMeasureField as DateMeasureField;
    impl crate::value::ToValue for DateMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimedefaultvalues.html
    pub struct DateTimeDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimeDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimeDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimeDefaultValues as DateTimeDefaultValues;
    impl crate::value::ToValue for DateTimeDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimeformatconfiguration.html
    pub struct DateTimeFormatConfiguration_ {
        pub date_time_format: Option<crate::value::ExpString>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub numeric_format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimeFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimeFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimeFormatConfiguration as DateTimeFormatConfiguration;
    impl crate::value::ToValue for DateTimeFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_format_configuration {
                properties.insert(
                    "NumericFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimehierarchy.html
    pub struct DateTimeHierarchy_ {
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimeHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimeHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimeHierarchy as DateTimeHierarchy;
    impl crate::value::ToValue for DateTimeHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimeparameter.html
    pub struct DateTimeParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimeParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimeParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimeParameter as DateTimeParameter;
    impl crate::value::ToValue for DateTimeParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimeparameterdeclaration.html
    pub struct DateTimeParameterDeclaration_ {
        pub default_values: Option<Box<DateTimeDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value_when_unset: Option<Box<DateTimeValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimeParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimeParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimeParameterDeclaration as DateTimeParameterDeclaration;
    impl crate::value::ToValue for DateTimeParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimepickercontroldisplayoptions.html
    pub struct DateTimePickerControlDisplayOptions_ {
        pub date_icon_visibility: Option<crate::value::ExpString>,
        pub date_time_format: Option<crate::value::ExpString>,
        pub helper_text_visibility: Option<crate::value::ExpString>,
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimePickerControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimePickerControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimePickerControlDisplayOptions as DateTimePickerControlDisplayOptions;
    impl crate::value::ToValue for DateTimePickerControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_icon_visibility {
                properties.insert(
                    "DateIconVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.helper_text_visibility {
                properties.insert(
                    "HelperTextVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimevaluewhenunsetconfiguration.html
    pub struct DateTimeValueWhenUnsetConfiguration_ {
        pub custom_value: Option<crate::value::ExpString>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DateTimeValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DateTimeValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DateTimeValueWhenUnsetConfiguration as DateTimeValueWhenUnsetConfiguration;
    impl crate::value::ToValue for DateTimeValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-decimaldefaultvalues.html
    pub struct DecimalDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DecimalDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DecimalDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DecimalDefaultValues as DecimalDefaultValues;
    impl crate::value::ToValue for DecimalDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-decimalparameter.html
    pub struct DecimalParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DecimalParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DecimalParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DecimalParameter as DecimalParameter;
    impl crate::value::ToValue for DecimalParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-decimalparameterdeclaration.html
    pub struct DecimalParameterDeclaration_ {
        pub default_values: Option<Box<DecimalDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<DecimalValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DecimalParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DecimalParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DecimalParameterDeclaration as DecimalParameterDeclaration;
    impl crate::value::ToValue for DecimalParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-decimalplacesconfiguration.html
    pub struct DecimalPlacesConfiguration_ {
        pub decimal_places: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DecimalPlacesConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DecimalPlacesConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DecimalPlacesConfiguration as DecimalPlacesConfiguration;
    impl crate::value::ToValue for DecimalPlacesConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DecimalPlaces".to_string(),
                crate::value::ToValue::to_value(&self.decimal_places),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-decimalvaluewhenunsetconfiguration.html
    pub struct DecimalValueWhenUnsetConfiguration_ {
        pub custom_value: Option<f64>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DecimalValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DecimalValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DecimalValueWhenUnsetConfiguration as DecimalValueWhenUnsetConfiguration;
    impl crate::value::ToValue for DecimalValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultdatetimepickercontroloptions.html
    pub struct DefaultDateTimePickerControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultDateTimePickerControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultDateTimePickerControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultDateTimePickerControlOptions as DefaultDateTimePickerControlOptions;
    impl crate::value::ToValue for DefaultDateTimePickerControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultfiltercontrolconfiguration.html
    pub struct DefaultFilterControlConfiguration_ {
        pub control_options: Box<DefaultFilterControlOptions_>,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultFilterControlConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultFilterControlConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultFilterControlConfiguration as DefaultFilterControlConfiguration;
    impl crate::value::ToValue for DefaultFilterControlConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ControlOptions".to_string(),
                crate::value::ToValue::to_value(&self.control_options),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultfiltercontroloptions.html
    pub struct DefaultFilterControlOptions_ {
        pub default_date_time_picker_options: Option<Box<DefaultDateTimePickerControlOptions_>>,
        pub default_dropdown_options: Option<Box<DefaultFilterDropDownControlOptions_>>,
        pub default_list_options: Option<Box<DefaultFilterListControlOptions_>>,
        pub default_relative_date_time_options: Option<Box<DefaultRelativeDateTimeControlOptions_>>,
        pub default_slider_options: Option<Box<DefaultSliderControlOptions_>>,
        pub default_text_area_options: Option<Box<DefaultTextAreaControlOptions_>>,
        pub default_text_field_options: Option<Box<DefaultTextFieldControlOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultFilterControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultFilterControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultFilterControlOptions as DefaultFilterControlOptions;
    impl crate::value::ToValue for DefaultFilterControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_date_time_picker_options {
                properties.insert(
                    "DefaultDateTimePickerOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_dropdown_options {
                properties.insert(
                    "DefaultDropdownOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_list_options {
                properties.insert(
                    "DefaultListOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_relative_date_time_options {
                properties.insert(
                    "DefaultRelativeDateTimeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_slider_options {
                properties.insert(
                    "DefaultSliderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_text_area_options {
                properties.insert(
                    "DefaultTextAreaOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_text_field_options {
                properties.insert(
                    "DefaultTextFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultfilterdropdowncontroloptions.html
    pub struct DefaultFilterDropDownControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultFilterDropDownControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultFilterDropDownControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultFilterDropDownControlOptions as DefaultFilterDropDownControlOptions;
    impl crate::value::ToValue for DefaultFilterDropDownControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultfilterlistcontroloptions.html
    pub struct DefaultFilterListControlOptions_ {
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultFilterListControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultFilterListControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultFilterListControlOptions as DefaultFilterListControlOptions;
    impl crate::value::ToValue for DefaultFilterListControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultfreeformlayoutconfiguration.html
    pub struct DefaultFreeFormLayoutConfiguration_ {
        pub canvas_size_options: Box<FreeFormLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultFreeFormLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultFreeFormLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultFreeFormLayoutConfiguration as DefaultFreeFormLayoutConfiguration;
    impl crate::value::ToValue for DefaultFreeFormLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultgridlayoutconfiguration.html
    pub struct DefaultGridLayoutConfiguration_ {
        pub canvas_size_options: Box<GridLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultGridLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultGridLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultGridLayoutConfiguration as DefaultGridLayoutConfiguration;
    impl crate::value::ToValue for DefaultGridLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultinteractivelayoutconfiguration.html
    pub struct DefaultInteractiveLayoutConfiguration_ {
        pub free_form: Option<Box<DefaultFreeFormLayoutConfiguration_>>,
        pub grid: Option<Box<DefaultGridLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultInteractiveLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultInteractiveLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultInteractiveLayoutConfiguration as DefaultInteractiveLayoutConfiguration;
    impl crate::value::ToValue for DefaultInteractiveLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.free_form {
                properties.insert(
                    "FreeForm".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid {
                properties.insert("Grid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultnewsheetconfiguration.html
    pub struct DefaultNewSheetConfiguration_ {
        pub interactive_layout_configuration: Option<Box<DefaultInteractiveLayoutConfiguration_>>,
        pub paginated_layout_configuration: Option<Box<DefaultPaginatedLayoutConfiguration_>>,
        pub sheet_content_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultNewSheetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultNewSheetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultNewSheetConfiguration as DefaultNewSheetConfiguration;
    impl crate::value::ToValue for DefaultNewSheetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.interactive_layout_configuration {
                properties.insert(
                    "InteractiveLayoutConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_layout_configuration {
                properties.insert(
                    "PaginatedLayoutConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_content_type {
                properties.insert(
                    "SheetContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultpaginatedlayoutconfiguration.html
    pub struct DefaultPaginatedLayoutConfiguration_ {
        pub section_based: Option<Box<DefaultSectionBasedLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultPaginatedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultPaginatedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultPaginatedLayoutConfiguration as DefaultPaginatedLayoutConfiguration;
    impl crate::value::ToValue for DefaultPaginatedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.section_based {
                properties.insert(
                    "SectionBased".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultrelativedatetimecontroloptions.html
    pub struct DefaultRelativeDateTimeControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<RelativeDateTimeControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultRelativeDateTimeControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultRelativeDateTimeControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultRelativeDateTimeControlOptions as DefaultRelativeDateTimeControlOptions;
    impl crate::value::ToValue for DefaultRelativeDateTimeControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultsectionbasedlayoutconfiguration.html
    pub struct DefaultSectionBasedLayoutConfiguration_ {
        pub canvas_size_options: Box<SectionBasedLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultSectionBasedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultSectionBasedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultSectionBasedLayoutConfiguration as DefaultSectionBasedLayoutConfiguration;
    impl crate::value::ToValue for DefaultSectionBasedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaultslidercontroloptions.html
    pub struct DefaultSliderControlOptions_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub step_size: f64,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultSliderControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultSliderControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultSliderControlOptions as DefaultSliderControlOptions;
    impl crate::value::ToValue for DefaultSliderControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaulttextareacontroloptions.html
    pub struct DefaultTextAreaControlOptions_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultTextAreaControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultTextAreaControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultTextAreaControlOptions as DefaultTextAreaControlOptions;
    impl crate::value::ToValue for DefaultTextAreaControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-defaulttextfieldcontroloptions.html
    pub struct DefaultTextFieldControlOptions_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DefaultTextFieldControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DefaultTextFieldControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DefaultTextFieldControlOptions as DefaultTextFieldControlOptions;
    impl crate::value::ToValue for DefaultTextFieldControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-destinationparametervalueconfiguration.html
    pub struct DestinationParameterValueConfiguration_ {
        pub custom_values_configuration: Option<Box<CustomValuesConfiguration_>>,
        pub select_all_value_options: Option<crate::value::ExpString>,
        pub source_column: Option<Box<ColumnIdentifier_>>,
        pub source_field: Option<crate::value::ExpString>,
        pub source_parameter_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DestinationParameterValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DestinationParameterValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DestinationParameterValueConfiguration as DestinationParameterValueConfiguration;
    impl crate::value::ToValue for DestinationParameterValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_values_configuration {
                properties.insert(
                    "CustomValuesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_value_options {
                properties.insert(
                    "SelectAllValueOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_column {
                properties.insert(
                    "SourceColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_field {
                properties.insert(
                    "SourceField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_parameter_name {
                properties.insert(
                    "SourceParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dimensionfield.html
    pub struct DimensionField_ {
        pub categorical_dimension_field: Option<Box<CategoricalDimensionField_>>,
        pub date_dimension_field: Option<Box<DateDimensionField_>>,
        pub numerical_dimension_field: Option<Box<NumericalDimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DimensionField as DimensionField;
    impl crate::value::ToValue for DimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.categorical_dimension_field {
                properties.insert(
                    "CategoricalDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_dimension_field {
                properties.insert(
                    "DateDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_dimension_field {
                properties.insert(
                    "NumericalDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-donutcenteroptions.html
    pub struct DonutCenterOptions_ {
        pub label_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DonutCenterOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DonutCenterOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DonutCenterOptions as DonutCenterOptions;
    impl crate::value::ToValue for DonutCenterOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_visibility {
                properties.insert(
                    "LabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-donutoptions.html
    pub struct DonutOptions_ {
        pub arc_options: Option<Box<ArcOptions_>>,
        pub donut_center_options: Option<Box<DonutCenterOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DonutOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DonutOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DonutOptions as DonutOptions;
    impl crate::value::ToValue for DonutOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_options {
                properties.insert(
                    "ArcOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.donut_center_options {
                properties.insert(
                    "DonutCenterOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-drilldownfilter.html
    pub struct DrillDownFilter_ {
        pub category_filter: Option<Box<CategoryDrillDownFilter_>>,
        pub numeric_equality_filter: Option<Box<NumericEqualityDrillDownFilter_>>,
        pub time_range_filter: Option<Box<TimeRangeDrillDownFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DrillDownFilter as DrillDownFilter;
    impl crate::value::ToValue for DrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_range_filter {
                properties.insert(
                    "TimeRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dropdowncontroldisplayoptions.html
    pub struct DropDownControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub select_all_options: Option<Box<ListControlSelectAllOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DropDownControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DropDownControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DropDownControlDisplayOptions as DropDownControlDisplayOptions;
    impl crate::value::ToValue for DropDownControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dynamicdefaultvalue.html
    pub struct DynamicDefaultValue_ {
        pub default_value_column: Box<ColumnIdentifier_>,
        pub group_name_column: Option<Box<ColumnIdentifier_>>,
        pub user_name_column: Option<Box<ColumnIdentifier_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_DynamicDefaultValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.DynamicDefaultValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_DynamicDefaultValue as DynamicDefaultValue;
    impl crate::value::ToValue for DynamicDefaultValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DefaultValueColumn".to_string(),
                crate::value::ToValue::to_value(&self.default_value_column),
            );
            if let Some(ref value) = self.group_name_column {
                properties.insert(
                    "GroupNameColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.user_name_column {
                properties.insert(
                    "UserNameColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-emptyvisual.html
    pub struct EmptyVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_EmptyVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.EmptyVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_EmptyVisual as EmptyVisual;
    impl crate::value::ToValue for EmptyVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-entity.html
    pub struct Entity_ {
        pub path: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Entity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Entity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Entity as Entity;
    impl crate::value::ToValue for Entity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.path {
                properties.insert("Path".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-excludeperiodconfiguration.html
    pub struct ExcludePeriodConfiguration_ {
        pub amount: f64,
        pub granularity: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ExcludePeriodConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ExcludePeriodConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ExcludePeriodConfiguration as ExcludePeriodConfiguration;
    impl crate::value::ToValue for ExcludePeriodConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Amount".to_string(),
                crate::value::ToValue::to_value(&self.amount),
            );
            properties.insert(
                "Granularity".to_string(),
                crate::value::ToValue::to_value(&self.granularity),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-executivesummaryoption.html
    pub struct ExecutiveSummaryOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ExecutiveSummaryOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ExecutiveSummaryOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ExecutiveSummaryOption as ExecutiveSummaryOption;
    impl crate::value::ToValue for ExecutiveSummaryOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-explicithierarchy.html
    pub struct ExplicitHierarchy_ {
        pub columns: Vec<ColumnIdentifier_>,
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ExplicitHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ExplicitHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ExplicitHierarchy as ExplicitHierarchy;
    impl crate::value::ToValue for ExplicitHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-exporthiddenfieldsoption.html
    pub struct ExportHiddenFieldsOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ExportHiddenFieldsOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ExportHiddenFieldsOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ExportHiddenFieldsOption as ExportHiddenFieldsOption;
    impl crate::value::ToValue for ExportHiddenFieldsOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-exporttocsvoption.html
    pub struct ExportToCSVOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ExportToCSVOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ExportToCSVOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ExportToCSVOption as ExportToCSVOption;
    impl crate::value::ToValue for ExportToCSVOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-exportwithhiddenfieldsoption.html
    pub struct ExportWithHiddenFieldsOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ExportWithHiddenFieldsOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ExportWithHiddenFieldsOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ExportWithHiddenFieldsOption as ExportWithHiddenFieldsOption;
    impl crate::value::ToValue for ExportWithHiddenFieldsOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fieldbasedtooltip.html
    pub struct FieldBasedTooltip_ {
        pub aggregation_visibility: Option<crate::value::ExpString>,
        pub tooltip_fields: Option<Vec<TooltipItem_>>,
        pub tooltip_title_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FieldBasedTooltip {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FieldBasedTooltip"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FieldBasedTooltip as FieldBasedTooltip;
    impl crate::value::ToValue for FieldBasedTooltip_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_visibility {
                properties.insert(
                    "AggregationVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_fields {
                properties.insert(
                    "TooltipFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_title_type {
                properties.insert(
                    "TooltipTitleType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fieldlabeltype.html
    pub struct FieldLabelType_ {
        pub field_id: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FieldLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FieldLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FieldLabelType as FieldLabelType;
    impl crate::value::ToValue for FieldLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fieldseriesitem.html
    pub struct FieldSeriesItem_ {
        pub axis_binding: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
        pub settings: Option<Box<LineChartSeriesSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FieldSeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FieldSeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FieldSeriesItem as FieldSeriesItem;
    impl crate::value::ToValue for FieldSeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AxisBinding".to_string(),
                crate::value::ToValue::to_value(&self.axis_binding),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.settings {
                properties.insert(
                    "Settings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fieldsort.html
    pub struct FieldSort_ {
        pub direction: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FieldSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FieldSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FieldSort as FieldSort;
    impl crate::value::ToValue for FieldSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fieldsortoptions.html
    pub struct FieldSortOptions_ {
        pub column_sort: Option<Box<ColumnSort_>>,
        pub field_sort: Option<Box<FieldSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FieldSortOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FieldSortOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FieldSortOptions as FieldSortOptions;
    impl crate::value::ToValue for FieldSortOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_sort {
                properties.insert(
                    "ColumnSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_sort {
                properties.insert(
                    "FieldSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fieldtooltipitem.html
    pub struct FieldTooltipItem_ {
        pub field_id: crate::value::ExpString,
        pub label: Option<crate::value::ExpString>,
        pub tooltip_target: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FieldTooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FieldTooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FieldTooltipItem as FieldTooltipItem;
    impl crate::value::ToValue for FieldTooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_target {
                properties.insert(
                    "TooltipTarget".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapaggregatedfieldwells.html
    pub struct FilledMapAggregatedFieldWells_ {
        pub geospatial: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapAggregatedFieldWells as FilledMapAggregatedFieldWells;
    impl crate::value::ToValue for FilledMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geospatial {
                properties.insert(
                    "Geospatial".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapconditionalformatting.html
    pub struct FilledMapConditionalFormatting_ {
        pub conditional_formatting_options: Vec<FilledMapConditionalFormattingOption_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapConditionalFormatting as FilledMapConditionalFormatting;
    impl crate::value::ToValue for FilledMapConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ConditionalFormattingOptions".to_string(),
                crate::value::ToValue::to_value(&self.conditional_formatting_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapconditionalformattingoption.html
    pub struct FilledMapConditionalFormattingOption_ {
        pub shape: Box<FilledMapShapeConditionalFormatting_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapConditionalFormattingOption as FilledMapConditionalFormattingOption;
    impl crate::value::ToValue for FilledMapConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Shape".to_string(),
                crate::value::ToValue::to_value(&self.shape),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapconfiguration.html
    pub struct FilledMapConfiguration_ {
        pub field_wells: Option<Box<FilledMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_style_options: Option<Box<GeospatialMapStyleOptions_>>,
        pub sort_configuration: Option<Box<FilledMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub window_options: Option<Box<GeospatialWindowOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapConfiguration as FilledMapConfiguration;
    impl crate::value::ToValue for FilledMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_style_options {
                properties.insert(
                    "MapStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.window_options {
                properties.insert(
                    "WindowOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapfieldwells.html
    pub struct FilledMapFieldWells_ {
        pub filled_map_aggregated_field_wells: Option<Box<FilledMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapFieldWells as FilledMapFieldWells;
    impl crate::value::ToValue for FilledMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filled_map_aggregated_field_wells {
                properties.insert(
                    "FilledMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapshapeconditionalformatting.html
    pub struct FilledMapShapeConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub format: Option<Box<ShapeConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapShapeConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapShapeConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapShapeConditionalFormatting as FilledMapShapeConditionalFormatting;
    impl crate::value::ToValue for FilledMapShapeConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format {
                properties.insert("Format".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapsortconfiguration.html
    pub struct FilledMapSortConfiguration_ {
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapSortConfiguration as FilledMapSortConfiguration;
    impl crate::value::ToValue for FilledMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filledmapvisual.html
    pub struct FilledMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<FilledMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub conditional_formatting: Option<Box<FilledMapConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilledMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilledMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilledMapVisual as FilledMapVisual;
    impl crate::value::ToValue for FilledMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filter.html
    pub struct Filter_ {
        pub category_filter: Option<Box<CategoryFilter_>>,
        pub nested_filter: Option<Box<NestedFilter_>>,
        pub numeric_equality_filter: Option<Box<NumericEqualityFilter_>>,
        pub numeric_range_filter: Option<Box<NumericRangeFilter_>>,
        pub relative_dates_filter: Option<Box<RelativeDatesFilter_>>,
        pub time_equality_filter: Option<Box<TimeEqualityFilter_>>,
        pub time_range_filter: Option<Box<TimeRangeFilter_>>,
        pub top_bottom_filter: Option<Box<TopBottomFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Filter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Filter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Filter as Filter;
    impl crate::value::ToValue for Filter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.nested_filter {
                properties.insert(
                    "NestedFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_range_filter {
                properties.insert(
                    "NumericRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_dates_filter {
                properties.insert(
                    "RelativeDatesFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_equality_filter {
                properties.insert(
                    "TimeEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_range_filter {
                properties.insert(
                    "TimeRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_filter {
                properties.insert(
                    "TopBottomFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filtercontrol.html
    pub struct FilterControl_ {
        pub cross_sheet: Option<Box<FilterCrossSheetControl_>>,
        pub date_time_picker: Option<Box<FilterDateTimePickerControl_>>,
        pub dropdown: Option<Box<FilterDropDownControl_>>,
        pub list: Option<Box<FilterListControl_>>,
        pub relative_date_time: Option<Box<FilterRelativeDateTimeControl_>>,
        pub slider: Option<Box<FilterSliderControl_>>,
        pub text_area: Option<Box<FilterTextAreaControl_>>,
        pub text_field: Option<Box<FilterTextFieldControl_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterControl as FilterControl;
    impl crate::value::ToValue for FilterControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cross_sheet {
                properties.insert(
                    "CrossSheet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_time_picker {
                properties.insert(
                    "DateTimePicker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dropdown {
                properties.insert(
                    "Dropdown".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list {
                properties.insert("List".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.relative_date_time {
                properties.insert(
                    "RelativeDateTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.slider {
                properties.insert("Slider".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_area {
                properties.insert(
                    "TextArea".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_field {
                properties.insert(
                    "TextField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filtercrosssheetcontrol.html
    pub struct FilterCrossSheetControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterCrossSheetControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterCrossSheetControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterCrossSheetControl as FilterCrossSheetControl;
    impl crate::value::ToValue for FilterCrossSheetControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterdatetimepickercontrol.html
    pub struct FilterDateTimePickerControl_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterDateTimePickerControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterDateTimePickerControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterDateTimePickerControl as FilterDateTimePickerControl;
    impl crate::value::ToValue for FilterDateTimePickerControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterdropdowncontrol.html
    pub struct FilterDropDownControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterDropDownControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterDropDownControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterDropDownControl as FilterDropDownControl;
    impl crate::value::ToValue for FilterDropDownControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filtergroup.html
    pub struct FilterGroup_ {
        pub cross_dataset: crate::value::ExpString,
        pub filter_group_id: crate::value::ExpString,
        pub filters: Vec<Filter_>,
        pub scope_configuration: Box<FilterScopeConfiguration_>,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterGroup {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterGroup"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterGroup as FilterGroup;
    impl crate::value::ToValue for FilterGroup_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CrossDataset".to_string(),
                crate::value::ToValue::to_value(&self.cross_dataset),
            );
            properties.insert(
                "FilterGroupId".to_string(),
                crate::value::ToValue::to_value(&self.filter_group_id),
            );
            properties.insert(
                "Filters".to_string(),
                crate::value::ToValue::to_value(&self.filters),
            );
            properties.insert(
                "ScopeConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.scope_configuration),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterlistconfiguration.html
    pub struct FilterListConfiguration_ {
        pub category_values: Option<Vec<crate::value::ExpString>>,
        pub match_operator: crate::value::ExpString,
        pub null_option: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterListConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterListConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterListConfiguration as FilterListConfiguration;
    impl crate::value::ToValue for FilterListConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_values {
                properties.insert(
                    "CategoryValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            if let Some(ref value) = self.null_option {
                properties.insert(
                    "NullOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterlistcontrol.html
    pub struct FilterListControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterListControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterListControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterListControl as FilterListControl;
    impl crate::value::ToValue for FilterListControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filteroperationselectedfieldsconfiguration.html
    pub struct FilterOperationSelectedFieldsConfiguration_ {
        pub selected_columns: Option<Vec<ColumnIdentifier_>>,
        pub selected_field_options: Option<crate::value::ExpString>,
        pub selected_fields: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterOperationSelectedFieldsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterOperationSelectedFieldsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterOperationSelectedFieldsConfiguration as FilterOperationSelectedFieldsConfiguration;
    impl crate::value::ToValue for FilterOperationSelectedFieldsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.selected_columns {
                properties.insert(
                    "SelectedColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_fields {
                properties.insert(
                    "SelectedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filteroperationtargetvisualsconfiguration.html
    pub struct FilterOperationTargetVisualsConfiguration_ {
        pub same_sheet_target_visual_configuration:
            Option<Box<SameSheetTargetVisualConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterOperationTargetVisualsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterOperationTargetVisualsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterOperationTargetVisualsConfiguration as FilterOperationTargetVisualsConfiguration;
    impl crate::value::ToValue for FilterOperationTargetVisualsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.same_sheet_target_visual_configuration {
                properties.insert(
                    "SameSheetTargetVisualConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterrelativedatetimecontrol.html
    pub struct FilterRelativeDateTimeControl_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<RelativeDateTimeControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterRelativeDateTimeControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterRelativeDateTimeControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterRelativeDateTimeControl as FilterRelativeDateTimeControl;
    impl crate::value::ToValue for FilterRelativeDateTimeControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterscopeconfiguration.html
    pub struct FilterScopeConfiguration_ {
        pub all_sheets: Option<serde_json::Value>,
        pub selected_sheets: Option<Box<SelectedSheetsFilterScopeConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterScopeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterScopeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterScopeConfiguration as FilterScopeConfiguration;
    impl crate::value::ToValue for FilterScopeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.all_sheets {
                properties.insert(
                    "AllSheets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_sheets {
                properties.insert(
                    "SelectedSheets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterselectablevalues.html
    pub struct FilterSelectableValues_ {
        pub values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterSelectableValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterSelectableValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterSelectableValues as FilterSelectableValues;
    impl crate::value::ToValue for FilterSelectableValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filterslidercontrol.html
    pub struct FilterSliderControl_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub source_filter_id: crate::value::ExpString,
        pub step_size: f64,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterSliderControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterSliderControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterSliderControl as FilterSliderControl;
    impl crate::value::ToValue for FilterSliderControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filtertextareacontrol.html
    pub struct FilterTextAreaControl_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterTextAreaControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterTextAreaControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterTextAreaControl as FilterTextAreaControl;
    impl crate::value::ToValue for FilterTextAreaControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-filtertextfieldcontrol.html
    pub struct FilterTextFieldControl_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FilterTextFieldControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FilterTextFieldControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FilterTextFieldControl as FilterTextFieldControl;
    impl crate::value::ToValue for FilterTextFieldControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fontconfiguration.html
    pub struct FontConfiguration_ {
        pub font_color: Option<crate::value::ExpString>,
        pub font_decoration: Option<crate::value::ExpString>,
        pub font_family: Option<crate::value::ExpString>,
        pub font_size: Option<Box<FontSize_>>,
        pub font_style: Option<crate::value::ExpString>,
        pub font_weight: Option<Box<FontWeight_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FontConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FontConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FontConfiguration as FontConfiguration;
    impl crate::value::ToValue for FontConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_color {
                properties.insert(
                    "FontColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_decoration {
                properties.insert(
                    "FontDecoration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_family {
                properties.insert(
                    "FontFamily".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_size {
                properties.insert(
                    "FontSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_style {
                properties.insert(
                    "FontStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_weight {
                properties.insert(
                    "FontWeight".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fontsize.html
    pub struct FontSize_ {
        pub absolute: Option<crate::value::ExpString>,
        pub relative: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FontSize {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FontSize"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FontSize as FontSize;
    impl crate::value::ToValue for FontSize_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.absolute {
                properties.insert(
                    "Absolute".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative {
                properties.insert(
                    "Relative".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-fontweight.html
    pub struct FontWeight_ {
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FontWeight {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FontWeight"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FontWeight as FontWeight;
    impl crate::value::ToValue for FontWeight_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-forecastcomputation.html
    pub struct ForecastComputation_ {
        pub computation_id: crate::value::ExpString,
        pub custom_seasonality_value: Option<f64>,
        pub lower_boundary: Option<f64>,
        pub name: Option<crate::value::ExpString>,
        pub periods_backward: Option<f64>,
        pub periods_forward: Option<f64>,
        pub prediction_interval: Option<f64>,
        pub seasonality: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub upper_boundary: Option<f64>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ForecastComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ForecastComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ForecastComputation as ForecastComputation;
    impl crate::value::ToValue for ForecastComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.custom_seasonality_value {
                properties.insert(
                    "CustomSeasonalityValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.lower_boundary {
                properties.insert(
                    "LowerBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.periods_backward {
                properties.insert(
                    "PeriodsBackward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_forward {
                properties.insert(
                    "PeriodsForward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prediction_interval {
                properties.insert(
                    "PredictionInterval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.seasonality {
                properties.insert(
                    "Seasonality".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.upper_boundary {
                properties.insert(
                    "UpperBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-forecastconfiguration.html
    pub struct ForecastConfiguration_ {
        pub forecast_properties: Option<Box<TimeBasedForecastProperties_>>,
        pub scenario: Option<Box<ForecastScenario_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ForecastConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ForecastConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ForecastConfiguration as ForecastConfiguration;
    impl crate::value::ToValue for ForecastConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.forecast_properties {
                properties.insert(
                    "ForecastProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scenario {
                properties.insert(
                    "Scenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-forecastscenario.html
    pub struct ForecastScenario_ {
        pub what_if_point_scenario: Option<Box<WhatIfPointScenario_>>,
        pub what_if_range_scenario: Option<Box<WhatIfRangeScenario_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ForecastScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ForecastScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ForecastScenario as ForecastScenario;
    impl crate::value::ToValue for ForecastScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.what_if_point_scenario {
                properties.insert(
                    "WhatIfPointScenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.what_if_range_scenario {
                properties.insert(
                    "WhatIfRangeScenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-formatconfiguration.html
    pub struct FormatConfiguration_ {
        pub date_time_format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
        pub number_format_configuration: Option<Box<NumberFormatConfiguration_>>,
        pub string_format_configuration: Option<Box<StringFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FormatConfiguration as FormatConfiguration;
    impl crate::value::ToValue for FormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format_configuration {
                properties.insert(
                    "DateTimeFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_format_configuration {
                properties.insert(
                    "NumberFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_format_configuration {
                properties.insert(
                    "StringFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformlayoutcanvassizeoptions.html
    pub struct FreeFormLayoutCanvasSizeOptions_ {
        pub screen_canvas_size_options: Option<Box<FreeFormLayoutScreenCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormLayoutCanvasSizeOptions as FreeFormLayoutCanvasSizeOptions;
    impl crate::value::ToValue for FreeFormLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.screen_canvas_size_options {
                properties.insert(
                    "ScreenCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformlayoutconfiguration.html
    pub struct FreeFormLayoutConfiguration_ {
        pub canvas_size_options: Option<Box<FreeFormLayoutCanvasSizeOptions_>>,
        pub elements: Vec<FreeFormLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormLayoutConfiguration as FreeFormLayoutConfiguration;
    impl crate::value::ToValue for FreeFormLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.canvas_size_options {
                properties.insert(
                    "CanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformlayoutelement.html
    pub struct FreeFormLayoutElement_ {
        pub background_style: Option<Box<FreeFormLayoutElementBackgroundStyle_>>,
        pub border_radius: Option<crate::value::ExpString>,
        pub border_style: Option<Box<FreeFormLayoutElementBorderStyle_>>,
        pub element_id: crate::value::ExpString,
        pub element_type: crate::value::ExpString,
        pub height: crate::value::ExpString,
        pub loading_animation: Option<Box<LoadingAnimation_>>,
        pub padding: Option<crate::value::ExpString>,
        pub rendering_rules: Option<Vec<SheetElementRenderingRule_>>,
        pub selected_border_style: Option<Box<FreeFormLayoutElementBorderStyle_>>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: crate::value::ExpString,
        pub x_axis_location: crate::value::ExpString,
        pub y_axis_location: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormLayoutElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormLayoutElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormLayoutElement as FreeFormLayoutElement;
    impl crate::value::ToValue for FreeFormLayoutElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_style {
                properties.insert(
                    "BackgroundStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_radius {
                properties.insert(
                    "BorderRadius".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ElementId".to_string(),
                crate::value::ToValue::to_value(&self.element_id),
            );
            properties.insert(
                "ElementType".to_string(),
                crate::value::ToValue::to_value(&self.element_type),
            );
            properties.insert(
                "Height".to_string(),
                crate::value::ToValue::to_value(&self.height),
            );
            if let Some(ref value) = self.loading_animation {
                properties.insert(
                    "LoadingAnimation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.padding {
                properties.insert(
                    "Padding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rendering_rules {
                properties.insert(
                    "RenderingRules".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_border_style {
                properties.insert(
                    "SelectedBorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Width".to_string(),
                crate::value::ToValue::to_value(&self.width),
            );
            properties.insert(
                "XAxisLocation".to_string(),
                crate::value::ToValue::to_value(&self.x_axis_location),
            );
            properties.insert(
                "YAxisLocation".to_string(),
                crate::value::ToValue::to_value(&self.y_axis_location),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformlayoutelementbackgroundstyle.html
    pub struct FreeFormLayoutElementBackgroundStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormLayoutElementBackgroundStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormLayoutElementBackgroundStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormLayoutElementBackgroundStyle as FreeFormLayoutElementBackgroundStyle;
    impl crate::value::ToValue for FreeFormLayoutElementBackgroundStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformlayoutelementborderstyle.html
    pub struct FreeFormLayoutElementBorderStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormLayoutElementBorderStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormLayoutElementBorderStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormLayoutElementBorderStyle as FreeFormLayoutElementBorderStyle;
    impl crate::value::ToValue for FreeFormLayoutElementBorderStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformlayoutscreencanvassizeoptions.html
    pub struct FreeFormLayoutScreenCanvasSizeOptions_ {
        pub optimized_view_port_width: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormLayoutScreenCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormLayoutScreenCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormLayoutScreenCanvasSizeOptions as FreeFormLayoutScreenCanvasSizeOptions;
    impl crate::value::ToValue for FreeFormLayoutScreenCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "OptimizedViewPortWidth".to_string(),
                crate::value::ToValue::to_value(&self.optimized_view_port_width),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-freeformsectionlayoutconfiguration.html
    pub struct FreeFormSectionLayoutConfiguration_ {
        pub elements: Vec<FreeFormLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FreeFormSectionLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FreeFormSectionLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FreeFormSectionLayoutConfiguration as FreeFormSectionLayoutConfiguration;
    impl crate::value::ToValue for FreeFormSectionLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-funnelchartaggregatedfieldwells.html
    pub struct FunnelChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FunnelChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FunnelChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FunnelChartAggregatedFieldWells as FunnelChartAggregatedFieldWells;
    impl crate::value::ToValue for FunnelChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-funnelchartconfiguration.html
    pub struct FunnelChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub data_label_options: Option<Box<FunnelChartDataLabelOptions_>>,
        pub field_wells: Option<Box<FunnelChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<FunnelChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FunnelChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FunnelChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FunnelChartConfiguration as FunnelChartConfiguration;
    impl crate::value::ToValue for FunnelChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_label_options {
                properties.insert(
                    "DataLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-funnelchartdatalabeloptions.html
    pub struct FunnelChartDataLabelOptions_ {
        pub category_label_visibility: Option<crate::value::ExpString>,
        pub label_color: Option<crate::value::ExpString>,
        pub label_font_configuration: Option<Box<FontConfiguration_>>,
        pub measure_data_label_style: Option<crate::value::ExpString>,
        pub measure_label_visibility: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FunnelChartDataLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FunnelChartDataLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FunnelChartDataLabelOptions as FunnelChartDataLabelOptions;
    impl crate::value::ToValue for FunnelChartDataLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_visibility {
                properties.insert(
                    "CategoryLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_color {
                properties.insert(
                    "LabelColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_font_configuration {
                properties.insert(
                    "LabelFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_data_label_style {
                properties.insert(
                    "MeasureDataLabelStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_label_visibility {
                properties.insert(
                    "MeasureLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-funnelchartfieldwells.html
    pub struct FunnelChartFieldWells_ {
        pub funnel_chart_aggregated_field_wells: Option<Box<FunnelChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FunnelChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FunnelChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FunnelChartFieldWells as FunnelChartFieldWells;
    impl crate::value::ToValue for FunnelChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.funnel_chart_aggregated_field_wells {
                properties.insert(
                    "FunnelChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-funnelchartsortconfiguration.html
    pub struct FunnelChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FunnelChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FunnelChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FunnelChartSortConfiguration as FunnelChartSortConfiguration;
    impl crate::value::ToValue for FunnelChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-funnelchartvisual.html
    pub struct FunnelChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<FunnelChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_FunnelChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.FunnelChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_FunnelChartVisual as FunnelChartVisual;
    impl crate::value::ToValue for FunnelChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartarcconditionalformatting.html
    pub struct GaugeChartArcConditionalFormatting_ {
        pub foreground_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartArcConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartArcConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartArcConditionalFormatting as GaugeChartArcConditionalFormatting;
    impl crate::value::ToValue for GaugeChartArcConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartcolorconfiguration.html
    pub struct GaugeChartColorConfiguration_ {
        pub background_color: Option<crate::value::ExpString>,
        pub foreground_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartColorConfiguration as GaugeChartColorConfiguration;
    impl crate::value::ToValue for GaugeChartColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartconditionalformatting.html
    pub struct GaugeChartConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<GaugeChartConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartConditionalFormatting as GaugeChartConditionalFormatting;
    impl crate::value::ToValue for GaugeChartConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartconditionalformattingoption.html
    pub struct GaugeChartConditionalFormattingOption_ {
        pub arc: Option<Box<GaugeChartArcConditionalFormatting_>>,
        pub primary_value: Option<Box<GaugeChartPrimaryValueConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartConditionalFormattingOption as GaugeChartConditionalFormattingOption;
    impl crate::value::ToValue for GaugeChartConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc {
                properties.insert("Arc".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_value {
                properties.insert(
                    "PrimaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartconfiguration.html
    pub struct GaugeChartConfiguration_ {
        pub color_configuration: Option<Box<GaugeChartColorConfiguration_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<GaugeChartFieldWells_>>,
        pub gauge_chart_options: Option<Box<GaugeChartOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub tooltip_options: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartConfiguration as GaugeChartConfiguration;
    impl crate::value::ToValue for GaugeChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_configuration {
                properties.insert(
                    "ColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gauge_chart_options {
                properties.insert(
                    "GaugeChartOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_options {
                properties.insert(
                    "TooltipOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartfieldwells.html
    pub struct GaugeChartFieldWells_ {
        pub target_values: Option<Vec<MeasureField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartFieldWells as GaugeChartFieldWells;
    impl crate::value::ToValue for GaugeChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_values {
                properties.insert(
                    "TargetValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartoptions.html
    pub struct GaugeChartOptions_ {
        pub arc: Option<Box<ArcConfiguration_>>,
        pub arc_axis: Option<Box<ArcAxisConfiguration_>>,
        pub comparison: Option<Box<ComparisonConfiguration_>>,
        pub primary_value_display_type: Option<crate::value::ExpString>,
        pub primary_value_font_configuration: Option<Box<FontConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartOptions as GaugeChartOptions;
    impl crate::value::ToValue for GaugeChartOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc {
                properties.insert("Arc".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.arc_axis {
                properties.insert(
                    "ArcAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison {
                properties.insert(
                    "Comparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_display_type {
                properties.insert(
                    "PrimaryValueDisplayType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_font_configuration {
                properties.insert(
                    "PrimaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartprimaryvalueconditionalformatting.html
    pub struct GaugeChartPrimaryValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartPrimaryValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartPrimaryValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartPrimaryValueConditionalFormatting as GaugeChartPrimaryValueConditionalFormatting;
    impl crate::value::ToValue for GaugeChartPrimaryValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gaugechartvisual.html
    pub struct GaugeChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<GaugeChartConfiguration_>>,
        pub conditional_formatting: Option<Box<GaugeChartConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GaugeChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GaugeChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GaugeChartVisual as GaugeChartVisual;
    impl crate::value::ToValue for GaugeChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialcategoricalcolor.html
    pub struct GeospatialCategoricalColor_ {
        pub category_data_colors: Vec<GeospatialCategoricalDataColor_>,
        pub default_opacity: Option<f64>,
        pub null_data_settings: Option<Box<GeospatialNullDataSettings_>>,
        pub null_data_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialCategoricalColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialCategoricalColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialCategoricalColor as GeospatialCategoricalColor;
    impl crate::value::ToValue for GeospatialCategoricalColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CategoryDataColors".to_string(),
                crate::value::ToValue::to_value(&self.category_data_colors),
            );
            if let Some(ref value) = self.default_opacity {
                properties.insert(
                    "DefaultOpacity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_settings {
                properties.insert(
                    "NullDataSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_visibility {
                properties.insert(
                    "NullDataVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialcategoricaldatacolor.html
    pub struct GeospatialCategoricalDataColor_ {
        pub color: crate::value::ExpString,
        pub data_value: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialCategoricalDataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialCategoricalDataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialCategoricalDataColor as GeospatialCategoricalDataColor;
    impl crate::value::ToValue for GeospatialCategoricalDataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "DataValue".to_string(),
                crate::value::ToValue::to_value(&self.data_value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialcircleradius.html
    pub struct GeospatialCircleRadius_ {
        pub radius: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialCircleRadius {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialCircleRadius"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialCircleRadius as GeospatialCircleRadius;
    impl crate::value::ToValue for GeospatialCircleRadius_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.radius {
                properties.insert("Radius".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialcirclesymbolstyle.html
    pub struct GeospatialCircleSymbolStyle_ {
        pub circle_radius: Option<Box<GeospatialCircleRadius_>>,
        pub fill_color: Option<Box<GeospatialColor_>>,
        pub stroke_color: Option<Box<GeospatialColor_>>,
        pub stroke_width: Option<Box<GeospatialLineWidth_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialCircleSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialCircleSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialCircleSymbolStyle as GeospatialCircleSymbolStyle;
    impl crate::value::ToValue for GeospatialCircleSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.circle_radius {
                properties.insert(
                    "CircleRadius".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_color {
                properties.insert(
                    "StrokeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_width {
                properties.insert(
                    "StrokeWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialcolor.html
    pub struct GeospatialColor_ {
        pub categorical: Option<Box<GeospatialCategoricalColor_>>,
        pub gradient: Option<Box<GeospatialGradientColor_>>,
        pub solid: Option<Box<GeospatialSolidColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialColor as GeospatialColor;
    impl crate::value::ToValue for GeospatialColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.categorical {
                properties.insert(
                    "Categorical".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gradient {
                properties.insert(
                    "Gradient".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.solid {
                properties.insert("Solid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialcoordinatebounds.html
    pub struct GeospatialCoordinateBounds_ {
        pub east: f64,
        pub north: f64,
        pub south: f64,
        pub west: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialCoordinateBounds {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialCoordinateBounds"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialCoordinateBounds as GeospatialCoordinateBounds;
    impl crate::value::ToValue for GeospatialCoordinateBounds_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "East".to_string(),
                crate::value::ToValue::to_value(&self.east),
            );
            properties.insert(
                "North".to_string(),
                crate::value::ToValue::to_value(&self.north),
            );
            properties.insert(
                "South".to_string(),
                crate::value::ToValue::to_value(&self.south),
            );
            properties.insert(
                "West".to_string(),
                crate::value::ToValue::to_value(&self.west),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialdatasourceitem.html
    pub struct GeospatialDataSourceItem_ {
        pub static_file_data_source: Option<Box<GeospatialStaticFileSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialDataSourceItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialDataSourceItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialDataSourceItem as GeospatialDataSourceItem;
    impl crate::value::ToValue for GeospatialDataSourceItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_file_data_source {
                properties.insert(
                    "StaticFileDataSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialgradientcolor.html
    pub struct GeospatialGradientColor_ {
        pub default_opacity: Option<f64>,
        pub null_data_settings: Option<Box<GeospatialNullDataSettings_>>,
        pub null_data_visibility: Option<crate::value::ExpString>,
        pub step_colors: Vec<GeospatialGradientStepColor_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialGradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialGradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialGradientColor as GeospatialGradientColor;
    impl crate::value::ToValue for GeospatialGradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_opacity {
                properties.insert(
                    "DefaultOpacity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_settings {
                properties.insert(
                    "NullDataSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_data_visibility {
                properties.insert(
                    "NullDataVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "StepColors".to_string(),
                crate::value::ToValue::to_value(&self.step_colors),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialgradientstepcolor.html
    pub struct GeospatialGradientStepColor_ {
        pub color: crate::value::ExpString,
        pub data_value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialGradientStepColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialGradientStepColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialGradientStepColor as GeospatialGradientStepColor;
    impl crate::value::ToValue for GeospatialGradientStepColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "DataValue".to_string(),
                crate::value::ToValue::to_value(&self.data_value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialheatmapcolorscale.html
    pub struct GeospatialHeatmapColorScale_ {
        pub colors: Option<Vec<GeospatialHeatmapDataColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialHeatmapColorScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialHeatmapColorScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialHeatmapColorScale as GeospatialHeatmapColorScale;
    impl crate::value::ToValue for GeospatialHeatmapColorScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialheatmapconfiguration.html
    pub struct GeospatialHeatmapConfiguration_ {
        pub heatmap_color: Option<Box<GeospatialHeatmapColorScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialHeatmapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialHeatmapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialHeatmapConfiguration as GeospatialHeatmapConfiguration;
    impl crate::value::ToValue for GeospatialHeatmapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heatmap_color {
                properties.insert(
                    "HeatmapColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialheatmapdatacolor.html
    pub struct GeospatialHeatmapDataColor_ {
        pub color: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialHeatmapDataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialHeatmapDataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialHeatmapDataColor as GeospatialHeatmapDataColor;
    impl crate::value::ToValue for GeospatialHeatmapDataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallayercolorfield.html
    pub struct GeospatialLayerColorField_ {
        pub color_dimensions_fields: Option<Vec<DimensionField_>>,
        pub color_values_fields: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLayerColorField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLayerColorField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLayerColorField as GeospatialLayerColorField;
    impl crate::value::ToValue for GeospatialLayerColorField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_dimensions_fields {
                properties.insert(
                    "ColorDimensionsFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_values_fields {
                properties.insert(
                    "ColorValuesFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallayerdefinition.html
    pub struct GeospatialLayerDefinition_ {
        pub line_layer: Option<Box<GeospatialLineLayer_>>,
        pub point_layer: Option<Box<GeospatialPointLayer_>>,
        pub polygon_layer: Option<Box<GeospatialPolygonLayer_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLayerDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLayerDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLayerDefinition as GeospatialLayerDefinition;
    impl crate::value::ToValue for GeospatialLayerDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_layer {
                properties.insert(
                    "LineLayer".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.point_layer {
                properties.insert(
                    "PointLayer".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.polygon_layer {
                properties.insert(
                    "PolygonLayer".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallayeritem.html
    pub struct GeospatialLayerItem_ {
        pub actions: Option<Vec<LayerCustomAction_>>,
        pub data_source: Option<Box<GeospatialDataSourceItem_>>,
        pub join_definition: Option<Box<GeospatialLayerJoinDefinition_>>,
        pub label: Option<crate::value::ExpString>,
        pub layer_definition: Option<Box<GeospatialLayerDefinition_>>,
        pub layer_id: crate::value::ExpString,
        pub layer_type: Option<crate::value::ExpString>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLayerItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLayerItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLayerItem as GeospatialLayerItem;
    impl crate::value::ToValue for GeospatialLayerItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_source {
                properties.insert(
                    "DataSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.join_definition {
                properties.insert(
                    "JoinDefinition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.layer_definition {
                properties.insert(
                    "LayerDefinition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "LayerId".to_string(),
                crate::value::ToValue::to_value(&self.layer_id),
            );
            if let Some(ref value) = self.layer_type {
                properties.insert(
                    "LayerType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallayerjoindefinition.html
    pub struct GeospatialLayerJoinDefinition_ {
        pub color_field: Option<Box<GeospatialLayerColorField_>>,
        pub dataset_key_field: Option<Box<UnaggregatedField_>>,
        pub shape_key_field: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLayerJoinDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLayerJoinDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLayerJoinDefinition as GeospatialLayerJoinDefinition;
    impl crate::value::ToValue for GeospatialLayerJoinDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_field {
                properties.insert(
                    "ColorField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dataset_key_field {
                properties.insert(
                    "DatasetKeyField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.shape_key_field {
                properties.insert(
                    "ShapeKeyField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallayermapconfiguration.html
    pub struct GeospatialLayerMapConfiguration_ {
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_layers: Option<Vec<GeospatialLayerItem_>>,
        pub map_state: Option<Box<GeospatialMapState_>>,
        pub map_style: Option<Box<GeospatialMapStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLayerMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLayerMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLayerMapConfiguration as GeospatialLayerMapConfiguration;
    impl crate::value::ToValue for GeospatialLayerMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_layers {
                properties.insert(
                    "MapLayers".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.map_state {
                properties.insert(
                    "MapState".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.map_style {
                properties.insert(
                    "MapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallinelayer.html
    pub struct GeospatialLineLayer_ {
        pub style: Box<GeospatialLineStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLineLayer {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLineLayer"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLineLayer as GeospatialLineLayer;
    impl crate::value::ToValue for GeospatialLineLayer_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Style".to_string(),
                crate::value::ToValue::to_value(&self.style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallinestyle.html
    pub struct GeospatialLineStyle_ {
        pub line_symbol_style: Option<Box<GeospatialLineSymbolStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLineStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLineStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLineStyle as GeospatialLineStyle;
    impl crate::value::ToValue for GeospatialLineStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_symbol_style {
                properties.insert(
                    "LineSymbolStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallinesymbolstyle.html
    pub struct GeospatialLineSymbolStyle_ {
        pub fill_color: Option<Box<GeospatialColor_>>,
        pub line_width: Option<Box<GeospatialLineWidth_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLineSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLineSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLineSymbolStyle as GeospatialLineSymbolStyle;
    impl crate::value::ToValue for GeospatialLineSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatiallinewidth.html
    pub struct GeospatialLineWidth_ {
        pub line_width: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialLineWidth {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialLineWidth"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialLineWidth as GeospatialLineWidth;
    impl crate::value::ToValue for GeospatialLineWidth_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapaggregatedfieldwells.html
    pub struct GeospatialMapAggregatedFieldWells_ {
        pub colors: Option<Vec<DimensionField_>>,
        pub geospatial: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapAggregatedFieldWells as GeospatialMapAggregatedFieldWells;
    impl crate::value::ToValue for GeospatialMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.geospatial {
                properties.insert(
                    "Geospatial".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapconfiguration.html
    pub struct GeospatialMapConfiguration_ {
        pub field_wells: Option<Box<GeospatialMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_style_options: Option<Box<GeospatialMapStyleOptions_>>,
        pub point_style_options: Option<Box<GeospatialPointStyleOptions_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub window_options: Option<Box<GeospatialWindowOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapConfiguration as GeospatialMapConfiguration;
    impl crate::value::ToValue for GeospatialMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_style_options {
                properties.insert(
                    "MapStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.point_style_options {
                properties.insert(
                    "PointStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.window_options {
                properties.insert(
                    "WindowOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapfieldwells.html
    pub struct GeospatialMapFieldWells_ {
        pub geospatial_map_aggregated_field_wells: Option<Box<GeospatialMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapFieldWells as GeospatialMapFieldWells;
    impl crate::value::ToValue for GeospatialMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geospatial_map_aggregated_field_wells {
                properties.insert(
                    "GeospatialMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapstate.html
    pub struct GeospatialMapState_ {
        pub bounds: Option<Box<GeospatialCoordinateBounds_>>,
        pub map_navigation: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapState {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapState"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapState as GeospatialMapState;
    impl crate::value::ToValue for GeospatialMapState_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bounds {
                properties.insert("Bounds".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_navigation {
                properties.insert(
                    "MapNavigation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapstyle.html
    pub struct GeospatialMapStyle_ {
        pub background_color: Option<crate::value::ExpString>,
        pub base_map_style: Option<crate::value::ExpString>,
        pub base_map_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapStyle as GeospatialMapStyle;
    impl crate::value::ToValue for GeospatialMapStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_map_style {
                properties.insert(
                    "BaseMapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_map_visibility {
                properties.insert(
                    "BaseMapVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapstyleoptions.html
    pub struct GeospatialMapStyleOptions_ {
        pub base_map_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapStyleOptions as GeospatialMapStyleOptions;
    impl crate::value::ToValue for GeospatialMapStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.base_map_style {
                properties.insert(
                    "BaseMapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialmapvisual.html
    pub struct GeospatialMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<GeospatialMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialMapVisual as GeospatialMapVisual;
    impl crate::value::ToValue for GeospatialMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialnulldatasettings.html
    pub struct GeospatialNullDataSettings_ {
        pub symbol_style: Box<GeospatialNullSymbolStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialNullDataSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialNullDataSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialNullDataSettings as GeospatialNullDataSettings;
    impl crate::value::ToValue for GeospatialNullDataSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "SymbolStyle".to_string(),
                crate::value::ToValue::to_value(&self.symbol_style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialnullsymbolstyle.html
    pub struct GeospatialNullSymbolStyle_ {
        pub fill_color: Option<crate::value::ExpString>,
        pub stroke_color: Option<crate::value::ExpString>,
        pub stroke_width: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialNullSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialNullSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialNullSymbolStyle as GeospatialNullSymbolStyle;
    impl crate::value::ToValue for GeospatialNullSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_color {
                properties.insert(
                    "StrokeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_width {
                properties.insert(
                    "StrokeWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialpointlayer.html
    pub struct GeospatialPointLayer_ {
        pub style: Box<GeospatialPointStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialPointLayer {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialPointLayer"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialPointLayer as GeospatialPointLayer;
    impl crate::value::ToValue for GeospatialPointLayer_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Style".to_string(),
                crate::value::ToValue::to_value(&self.style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialpointstyle.html
    pub struct GeospatialPointStyle_ {
        pub circle_symbol_style: Option<Box<GeospatialCircleSymbolStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialPointStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialPointStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialPointStyle as GeospatialPointStyle;
    impl crate::value::ToValue for GeospatialPointStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.circle_symbol_style {
                properties.insert(
                    "CircleSymbolStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialpointstyleoptions.html
    pub struct GeospatialPointStyleOptions_ {
        pub cluster_marker_configuration: Option<Box<ClusterMarkerConfiguration_>>,
        pub heatmap_configuration: Option<Box<GeospatialHeatmapConfiguration_>>,
        pub selected_point_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialPointStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialPointStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialPointStyleOptions as GeospatialPointStyleOptions;
    impl crate::value::ToValue for GeospatialPointStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_marker_configuration {
                properties.insert(
                    "ClusterMarkerConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heatmap_configuration {
                properties.insert(
                    "HeatmapConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_point_style {
                properties.insert(
                    "SelectedPointStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialpolygonlayer.html
    pub struct GeospatialPolygonLayer_ {
        pub style: Box<GeospatialPolygonStyle_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialPolygonLayer {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialPolygonLayer"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialPolygonLayer as GeospatialPolygonLayer;
    impl crate::value::ToValue for GeospatialPolygonLayer_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Style".to_string(),
                crate::value::ToValue::to_value(&self.style),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialpolygonstyle.html
    pub struct GeospatialPolygonStyle_ {
        pub polygon_symbol_style: Option<Box<GeospatialPolygonSymbolStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialPolygonStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialPolygonStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialPolygonStyle as GeospatialPolygonStyle;
    impl crate::value::ToValue for GeospatialPolygonStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.polygon_symbol_style {
                properties.insert(
                    "PolygonSymbolStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialpolygonsymbolstyle.html
    pub struct GeospatialPolygonSymbolStyle_ {
        pub fill_color: Option<Box<GeospatialColor_>>,
        pub stroke_color: Option<Box<GeospatialColor_>>,
        pub stroke_width: Option<Box<GeospatialLineWidth_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialPolygonSymbolStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialPolygonSymbolStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialPolygonSymbolStyle as GeospatialPolygonSymbolStyle;
    impl crate::value::ToValue for GeospatialPolygonSymbolStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_color {
                properties.insert(
                    "FillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_color {
                properties.insert(
                    "StrokeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.stroke_width {
                properties.insert(
                    "StrokeWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialsolidcolor.html
    pub struct GeospatialSolidColor_ {
        pub color: crate::value::ExpString,
        pub state: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialSolidColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialSolidColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialSolidColor as GeospatialSolidColor;
    impl crate::value::ToValue for GeospatialSolidColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            if let Some(ref value) = self.state {
                properties.insert("State".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialstaticfilesource.html
    pub struct GeospatialStaticFileSource_ {
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialStaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialStaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialStaticFileSource as GeospatialStaticFileSource;
    impl crate::value::ToValue for GeospatialStaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-geospatialwindowoptions.html
    pub struct GeospatialWindowOptions_ {
        pub bounds: Option<Box<GeospatialCoordinateBounds_>>,
        pub map_zoom_mode: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GeospatialWindowOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GeospatialWindowOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GeospatialWindowOptions as GeospatialWindowOptions;
    impl crate::value::ToValue for GeospatialWindowOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bounds {
                properties.insert("Bounds".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_zoom_mode {
                properties.insert(
                    "MapZoomMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-globaltableborderoptions.html
    pub struct GlobalTableBorderOptions_ {
        pub side_specific_border: Option<Box<TableSideBorderOptions_>>,
        pub uniform_border: Option<Box<TableBorderOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GlobalTableBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GlobalTableBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GlobalTableBorderOptions as GlobalTableBorderOptions;
    impl crate::value::ToValue for GlobalTableBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.side_specific_border {
                properties.insert(
                    "SideSpecificBorder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.uniform_border {
                properties.insert(
                    "UniformBorder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gradientcolor.html
    pub struct GradientColor_ {
        pub stops: Option<Vec<GradientStop_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GradientColor as GradientColor;
    impl crate::value::ToValue for GradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.stops {
                properties.insert("Stops".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gradientstop.html
    pub struct GradientStop_ {
        pub color: Option<crate::value::ExpString>,
        pub data_value: Option<f64>,
        pub gradient_offset: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GradientStop {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GradientStop"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GradientStop as GradientStop;
    impl crate::value::ToValue for GradientStop_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_value {
                properties.insert(
                    "DataValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "GradientOffset".to_string(),
                crate::value::ToValue::to_value(&self.gradient_offset),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gridlayoutcanvassizeoptions.html
    pub struct GridLayoutCanvasSizeOptions_ {
        pub screen_canvas_size_options: Option<Box<GridLayoutScreenCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GridLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GridLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GridLayoutCanvasSizeOptions as GridLayoutCanvasSizeOptions;
    impl crate::value::ToValue for GridLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.screen_canvas_size_options {
                properties.insert(
                    "ScreenCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gridlayoutconfiguration.html
    pub struct GridLayoutConfiguration_ {
        pub canvas_size_options: Option<Box<GridLayoutCanvasSizeOptions_>>,
        pub elements: Vec<GridLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GridLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GridLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GridLayoutConfiguration as GridLayoutConfiguration;
    impl crate::value::ToValue for GridLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.canvas_size_options {
                properties.insert(
                    "CanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gridlayoutelement.html
    pub struct GridLayoutElement_ {
        pub background_style: Option<Box<GridLayoutElementBackgroundStyle_>>,
        pub border_radius: Option<crate::value::ExpString>,
        pub border_style: Option<Box<GridLayoutElementBorderStyle_>>,
        pub column_index: Option<f64>,
        pub column_span: f64,
        pub element_id: crate::value::ExpString,
        pub element_type: crate::value::ExpString,
        pub loading_animation: Option<Box<LoadingAnimation_>>,
        pub padding: Option<crate::value::ExpString>,
        pub row_index: Option<f64>,
        pub row_span: f64,
        pub selected_border_style: Option<Box<GridLayoutElementBorderStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GridLayoutElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GridLayoutElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GridLayoutElement as GridLayoutElement;
    impl crate::value::ToValue for GridLayoutElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_style {
                properties.insert(
                    "BackgroundStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_radius {
                properties.insert(
                    "BorderRadius".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_index {
                properties.insert(
                    "ColumnIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnSpan".to_string(),
                crate::value::ToValue::to_value(&self.column_span),
            );
            properties.insert(
                "ElementId".to_string(),
                crate::value::ToValue::to_value(&self.element_id),
            );
            properties.insert(
                "ElementType".to_string(),
                crate::value::ToValue::to_value(&self.element_type),
            );
            if let Some(ref value) = self.loading_animation {
                properties.insert(
                    "LoadingAnimation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.padding {
                properties.insert(
                    "Padding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_index {
                properties.insert(
                    "RowIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RowSpan".to_string(),
                crate::value::ToValue::to_value(&self.row_span),
            );
            if let Some(ref value) = self.selected_border_style {
                properties.insert(
                    "SelectedBorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gridlayoutelementbackgroundstyle.html
    pub struct GridLayoutElementBackgroundStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GridLayoutElementBackgroundStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GridLayoutElementBackgroundStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GridLayoutElementBackgroundStyle as GridLayoutElementBackgroundStyle;
    impl crate::value::ToValue for GridLayoutElementBackgroundStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gridlayoutelementborderstyle.html
    pub struct GridLayoutElementBorderStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GridLayoutElementBorderStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GridLayoutElementBorderStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GridLayoutElementBorderStyle as GridLayoutElementBorderStyle;
    impl crate::value::ToValue for GridLayoutElementBorderStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-gridlayoutscreencanvassizeoptions.html
    pub struct GridLayoutScreenCanvasSizeOptions_ {
        pub optimized_view_port_width: Option<crate::value::ExpString>,
        pub resize_option: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GridLayoutScreenCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GridLayoutScreenCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GridLayoutScreenCanvasSizeOptions as GridLayoutScreenCanvasSizeOptions;
    impl crate::value::ToValue for GridLayoutScreenCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.optimized_view_port_width {
                properties.insert(
                    "OptimizedViewPortWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ResizeOption".to_string(),
                crate::value::ToValue::to_value(&self.resize_option),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-growthratecomputation.html
    pub struct GrowthRateComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub period_size: Option<f64>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_GrowthRateComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.GrowthRateComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_GrowthRateComputation as GrowthRateComputation;
    impl crate::value::ToValue for GrowthRateComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.period_size {
                properties.insert(
                    "PeriodSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-headerfootersectionconfiguration.html
    pub struct HeaderFooterSectionConfiguration_ {
        pub layout: Box<SectionLayoutConfiguration_>,
        pub section_id: crate::value::ExpString,
        pub style: Option<Box<SectionStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HeaderFooterSectionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HeaderFooterSectionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HeaderFooterSectionConfiguration as HeaderFooterSectionConfiguration;
    impl crate::value::ToValue for HeaderFooterSectionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Layout".to_string(),
                crate::value::ToValue::to_value(&self.layout),
            );
            properties.insert(
                "SectionId".to_string(),
                crate::value::ToValue::to_value(&self.section_id),
            );
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-heatmapaggregatedfieldwells.html
    pub struct HeatMapAggregatedFieldWells_ {
        pub columns: Option<Vec<DimensionField_>>,
        pub rows: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HeatMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HeatMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HeatMapAggregatedFieldWells as HeatMapAggregatedFieldWells;
    impl crate::value::ToValue for HeatMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows {
                properties.insert("Rows".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-heatmapconfiguration.html
    pub struct HeatMapConfiguration_ {
        pub color_scale: Option<Box<ColorScale_>>,
        pub column_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<HeatMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub row_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<HeatMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HeatMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HeatMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HeatMapConfiguration as HeatMapConfiguration;
    impl crate::value::ToValue for HeatMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_scale {
                properties.insert(
                    "ColorScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_label_options {
                properties.insert(
                    "ColumnLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.row_label_options {
                properties.insert(
                    "RowLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-heatmapfieldwells.html
    pub struct HeatMapFieldWells_ {
        pub heat_map_aggregated_field_wells: Option<Box<HeatMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HeatMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HeatMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HeatMapFieldWells as HeatMapFieldWells;
    impl crate::value::ToValue for HeatMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heat_map_aggregated_field_wells {
                properties.insert(
                    "HeatMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-heatmapsortconfiguration.html
    pub struct HeatMapSortConfiguration_ {
        pub heat_map_column_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub heat_map_column_sort: Option<Vec<FieldSortOptions_>>,
        pub heat_map_row_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub heat_map_row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HeatMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HeatMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HeatMapSortConfiguration as HeatMapSortConfiguration;
    impl crate::value::ToValue for HeatMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heat_map_column_items_limit_configuration {
                properties.insert(
                    "HeatMapColumnItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_column_sort {
                properties.insert(
                    "HeatMapColumnSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_row_items_limit_configuration {
                properties.insert(
                    "HeatMapRowItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_row_sort {
                properties.insert(
                    "HeatMapRowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-heatmapvisual.html
    pub struct HeatMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<HeatMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HeatMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HeatMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HeatMapVisual as HeatMapVisual;
    impl crate::value::ToValue for HeatMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-histogramaggregatedfieldwells.html
    pub struct HistogramAggregatedFieldWells_ {
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HistogramAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HistogramAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HistogramAggregatedFieldWells as HistogramAggregatedFieldWells;
    impl crate::value::ToValue for HistogramAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-histogrambinoptions.html
    pub struct HistogramBinOptions_ {
        pub bin_count: Option<Box<BinCountOptions_>>,
        pub bin_width: Option<Box<BinWidthOptions_>>,
        pub selected_bin_type: Option<crate::value::ExpString>,
        pub start_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HistogramBinOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HistogramBinOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HistogramBinOptions as HistogramBinOptions;
    impl crate::value::ToValue for HistogramBinOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_count {
                properties.insert(
                    "BinCount".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.bin_width {
                properties.insert(
                    "BinWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_bin_type {
                properties.insert(
                    "SelectedBinType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_value {
                properties.insert(
                    "StartValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-histogramconfiguration.html
    pub struct HistogramConfiguration_ {
        pub bin_options: Option<Box<HistogramBinOptions_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<HistogramFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HistogramConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HistogramConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HistogramConfiguration as HistogramConfiguration;
    impl crate::value::ToValue for HistogramConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_options {
                properties.insert(
                    "BinOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_display_options {
                properties.insert(
                    "YAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-histogramfieldwells.html
    pub struct HistogramFieldWells_ {
        pub histogram_aggregated_field_wells: Option<Box<HistogramAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HistogramFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HistogramFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HistogramFieldWells as HistogramFieldWells;
    impl crate::value::ToValue for HistogramFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.histogram_aggregated_field_wells {
                properties.insert(
                    "HistogramAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-histogramvisual.html
    pub struct HistogramVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<HistogramConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_HistogramVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.HistogramVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_HistogramVisual as HistogramVisual;
    impl crate::value::ToValue for HistogramVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-imagecustomaction.html
    pub struct ImageCustomAction_ {
        pub action_operations: Vec<ImageCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ImageCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ImageCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ImageCustomAction as ImageCustomAction;
    impl crate::value::ToValue for ImageCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-imagecustomactionoperation.html
    pub struct ImageCustomActionOperation_ {
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ImageCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ImageCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ImageCustomActionOperation as ImageCustomActionOperation;
    impl crate::value::ToValue for ImageCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-imageinteractionoptions.html
    pub struct ImageInteractionOptions_ {
        pub image_menu_option: Option<Box<ImageMenuOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ImageInteractionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ImageInteractionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ImageInteractionOptions as ImageInteractionOptions;
    impl crate::value::ToValue for ImageInteractionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_menu_option {
                properties.insert(
                    "ImageMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-imagemenuoption.html
    pub struct ImageMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ImageMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ImageMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ImageMenuOption as ImageMenuOption;
    impl crate::value::ToValue for ImageMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-imagestaticfile.html
    pub struct ImageStaticFile_ {
        pub source: Option<Box<StaticFileSource_>>,
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ImageStaticFile {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ImageStaticFile"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ImageStaticFile as ImageStaticFile;
    impl crate::value::ToValue for ImageStaticFile_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-innerfilter.html
    pub struct InnerFilter_ {
        pub category_inner_filter: Option<Box<CategoryInnerFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_InnerFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.InnerFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_InnerFilter as InnerFilter;
    impl crate::value::ToValue for InnerFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_inner_filter {
                properties.insert(
                    "CategoryInnerFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-insightconfiguration.html
    pub struct InsightConfiguration_ {
        pub computations: Option<Vec<Computation_>>,
        pub custom_narrative: Option<Box<CustomNarrativeOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_InsightConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.InsightConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_InsightConfiguration as InsightConfiguration;
    impl crate::value::ToValue for InsightConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.computations {
                properties.insert(
                    "Computations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_narrative {
                properties.insert(
                    "CustomNarrative".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-insightvisual.html
    pub struct InsightVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub insight_configuration: Option<Box<InsightConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_InsightVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.InsightVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_InsightVisual as InsightVisual;
    impl crate::value::ToValue for InsightVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.insight_configuration {
                properties.insert(
                    "InsightConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-integerdefaultvalues.html
    pub struct IntegerDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_IntegerDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.IntegerDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_IntegerDefaultValues as IntegerDefaultValues;
    impl crate::value::ToValue for IntegerDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-integerparameter.html
    pub struct IntegerParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_IntegerParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.IntegerParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_IntegerParameter as IntegerParameter;
    impl crate::value::ToValue for IntegerParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-integerparameterdeclaration.html
    pub struct IntegerParameterDeclaration_ {
        pub default_values: Option<Box<IntegerDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<IntegerValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_IntegerParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.IntegerParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_IntegerParameterDeclaration as IntegerParameterDeclaration;
    impl crate::value::ToValue for IntegerParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-integervaluewhenunsetconfiguration.html
    pub struct IntegerValueWhenUnsetConfiguration_ {
        pub custom_value: Option<f64>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_IntegerValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.IntegerValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_IntegerValueWhenUnsetConfiguration as IntegerValueWhenUnsetConfiguration;
    impl crate::value::ToValue for IntegerValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-itemslimitconfiguration.html
    pub struct ItemsLimitConfiguration_ {
        pub items_limit: Option<f64>,
        pub other_categories: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ItemsLimitConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ItemsLimitConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ItemsLimitConfiguration as ItemsLimitConfiguration;
    impl crate::value::ToValue for ItemsLimitConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit {
                properties.insert(
                    "ItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.other_categories {
                properties.insert(
                    "OtherCategories".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpiactualvalueconditionalformatting.html
    pub struct KPIActualValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIActualValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIActualValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIActualValueConditionalFormatting as KPIActualValueConditionalFormatting;
    impl crate::value::ToValue for KPIActualValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpicomparisonvalueconditionalformatting.html
    pub struct KPIComparisonValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIComparisonValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIComparisonValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIComparisonValueConditionalFormatting as KPIComparisonValueConditionalFormatting;
    impl crate::value::ToValue for KPIComparisonValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpiconditionalformatting.html
    pub struct KPIConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<KPIConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIConditionalFormatting as KPIConditionalFormatting;
    impl crate::value::ToValue for KPIConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpiconditionalformattingoption.html
    pub struct KPIConditionalFormattingOption_ {
        pub actual_value: Option<Box<KPIActualValueConditionalFormatting_>>,
        pub comparison_value: Option<Box<KPIComparisonValueConditionalFormatting_>>,
        pub primary_value: Option<Box<KPIPrimaryValueConditionalFormatting_>>,
        pub progress_bar: Option<Box<KPIProgressBarConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIConditionalFormattingOption as KPIConditionalFormattingOption;
    impl crate::value::ToValue for KPIConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actual_value {
                properties.insert(
                    "ActualValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_value {
                properties.insert(
                    "ComparisonValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value {
                properties.insert(
                    "PrimaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.progress_bar {
                properties.insert(
                    "ProgressBar".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpiconfiguration.html
    pub struct KPIConfiguration_ {
        pub field_wells: Option<Box<KPIFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub kpi_options: Option<Box<KPIOptions_>>,
        pub sort_configuration: Option<Box<KPISortConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIConfiguration as KPIConfiguration;
    impl crate::value::ToValue for KPIConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.kpi_options {
                properties.insert(
                    "KPIOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpifieldwells.html
    pub struct KPIFieldWells_ {
        pub target_values: Option<Vec<MeasureField_>>,
        pub trend_groups: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIFieldWells as KPIFieldWells;
    impl crate::value::ToValue for KPIFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_values {
                properties.insert(
                    "TargetValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trend_groups {
                properties.insert(
                    "TrendGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpioptions.html
    pub struct KPIOptions_ {
        pub comparison: Option<Box<ComparisonConfiguration_>>,
        pub primary_value_display_type: Option<crate::value::ExpString>,
        pub primary_value_font_configuration: Option<Box<FontConfiguration_>>,
        pub progress_bar: Option<Box<ProgressBarOptions_>>,
        pub secondary_value: Option<Box<SecondaryValueOptions_>>,
        pub secondary_value_font_configuration: Option<Box<FontConfiguration_>>,
        pub sparkline: Option<Box<KPISparklineOptions_>>,
        pub trend_arrows: Option<Box<TrendArrowOptions_>>,
        pub visual_layout_options: Option<Box<KPIVisualLayoutOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIOptions as KPIOptions;
    impl crate::value::ToValue for KPIOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.comparison {
                properties.insert(
                    "Comparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_display_type {
                properties.insert(
                    "PrimaryValueDisplayType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_font_configuration {
                properties.insert(
                    "PrimaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.progress_bar {
                properties.insert(
                    "ProgressBar".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_value {
                properties.insert(
                    "SecondaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_value_font_configuration {
                properties.insert(
                    "SecondaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sparkline {
                properties.insert(
                    "Sparkline".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trend_arrows {
                properties.insert(
                    "TrendArrows".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_layout_options {
                properties.insert(
                    "VisualLayoutOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpiprimaryvalueconditionalformatting.html
    pub struct KPIPrimaryValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIPrimaryValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIPrimaryValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIPrimaryValueConditionalFormatting as KPIPrimaryValueConditionalFormatting;
    impl crate::value::ToValue for KPIPrimaryValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpiprogressbarconditionalformatting.html
    pub struct KPIProgressBarConditionalFormatting_ {
        pub foreground_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIProgressBarConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIProgressBarConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIProgressBarConditionalFormatting as KPIProgressBarConditionalFormatting;
    impl crate::value::ToValue for KPIProgressBarConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpisortconfiguration.html
    pub struct KPISortConfiguration_ {
        pub trend_group_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPISortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPISortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPISortConfiguration as KPISortConfiguration;
    impl crate::value::ToValue for KPISortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.trend_group_sort {
                properties.insert(
                    "TrendGroupSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpisparklineoptions.html
    pub struct KPISparklineOptions_ {
        pub color: Option<crate::value::ExpString>,
        pub tooltip_visibility: Option<crate::value::ExpString>,
        pub r#type: crate::value::ExpString,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPISparklineOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPISparklineOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPISparklineOptions as KPISparklineOptions;
    impl crate::value::ToValue for KPISparklineOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_visibility {
                properties.insert(
                    "TooltipVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpivisual.html
    pub struct KPIVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<KPIConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub conditional_formatting: Option<Box<KPIConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIVisual as KPIVisual;
    impl crate::value::ToValue for KPIVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpivisuallayoutoptions.html
    pub struct KPIVisualLayoutOptions_ {
        pub standard_layout: Option<Box<KPIVisualStandardLayout_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIVisualLayoutOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIVisualLayoutOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIVisualLayoutOptions as KPIVisualLayoutOptions;
    impl crate::value::ToValue for KPIVisualLayoutOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.standard_layout {
                properties.insert(
                    "StandardLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-kpivisualstandardlayout.html
    pub struct KPIVisualStandardLayout_ {
        pub r#type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_KPIVisualStandardLayout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.KPIVisualStandardLayout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_KPIVisualStandardLayout as KPIVisualStandardLayout;
    impl crate::value::ToValue for KPIVisualStandardLayout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-labeloptions.html
    pub struct LabelOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LabelOptions as LabelOptions;
    impl crate::value::ToValue for LabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-layercustomaction.html
    pub struct LayerCustomAction_ {
        pub action_operations: Vec<LayerCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LayerCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LayerCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LayerCustomAction as LayerCustomAction;
    impl crate::value::ToValue for LayerCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-layercustomactionoperation.html
    pub struct LayerCustomActionOperation_ {
        pub filter_operation: Option<Box<CustomActionFilterOperation_>>,
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LayerCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LayerCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LayerCustomActionOperation as LayerCustomActionOperation;
    impl crate::value::ToValue for LayerCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filter_operation {
                properties.insert(
                    "FilterOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-layermapvisual.html
    pub struct LayerMapVisual_ {
        pub chart_configuration: Option<Box<GeospatialLayerMapConfiguration_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LayerMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LayerMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LayerMapVisual as LayerMapVisual;
    impl crate::value::ToValue for LayerMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-layout.html
    pub struct Layout_ {
        pub configuration: Box<LayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Layout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Layout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Layout as Layout;
    impl crate::value::ToValue for Layout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-layoutconfiguration.html
    pub struct LayoutConfiguration_ {
        pub free_form_layout: Option<Box<FreeFormLayoutConfiguration_>>,
        pub grid_layout: Option<Box<GridLayoutConfiguration_>>,
        pub section_based_layout: Option<Box<SectionBasedLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LayoutConfiguration as LayoutConfiguration;
    impl crate::value::ToValue for LayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.free_form_layout {
                properties.insert(
                    "FreeFormLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid_layout {
                properties.insert(
                    "GridLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.section_based_layout {
                properties.insert(
                    "SectionBasedLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-legendoptions.html
    pub struct LegendOptions_ {
        pub height: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub title: Option<Box<LabelOptions_>>,
        pub value_font_configuration: Option<Box<FontConfiguration_>>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LegendOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LegendOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LegendOptions as LegendOptions;
    impl crate::value::ToValue for LegendOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value_font_configuration {
                properties.insert(
                    "ValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartaggregatedfieldwells.html
    pub struct LineChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartAggregatedFieldWells as LineChartAggregatedFieldWells;
    impl crate::value::ToValue for LineChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartconfiguration.html
    pub struct LineChartConfiguration_ {
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub default_series_settings: Option<Box<LineChartDefaultSeriesSettings_>>,
        pub field_wells: Option<Box<LineChartFieldWells_>>,
        pub forecast_configurations: Option<Vec<ForecastConfiguration_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<LineSeriesAxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub secondary_y_axis_display_options: Option<Box<LineSeriesAxisDisplayOptions_>>,
        pub secondary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub series: Option<Vec<SeriesItem_>>,
        pub single_axis_options: Option<Box<SingleAxisOptions_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<LineChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub r#type: Option<crate::value::ExpString>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartConfiguration as LineChartConfiguration;
    impl crate::value::ToValue for LineChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_series_settings {
                properties.insert(
                    "DefaultSeriesSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.forecast_configurations {
                properties.insert(
                    "ForecastConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_display_options {
                properties.insert(
                    "SecondaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_label_options {
                properties.insert(
                    "SecondaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.series {
                properties.insert("Series".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.single_axis_options {
                properties.insert(
                    "SingleAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartdefaultseriessettings.html
    pub struct LineChartDefaultSeriesSettings_ {
        pub axis_binding: Option<crate::value::ExpString>,
        pub line_style_settings: Option<Box<LineChartLineStyleSettings_>>,
        pub marker_style_settings: Option<Box<LineChartMarkerStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartDefaultSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartDefaultSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartDefaultSeriesSettings as LineChartDefaultSeriesSettings;
    impl crate::value::ToValue for LineChartDefaultSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_binding {
                properties.insert(
                    "AxisBinding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_style_settings {
                properties.insert(
                    "LineStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_style_settings {
                properties.insert(
                    "MarkerStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartfieldwells.html
    pub struct LineChartFieldWells_ {
        pub line_chart_aggregated_field_wells: Option<Box<LineChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartFieldWells as LineChartFieldWells;
    impl crate::value::ToValue for LineChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_chart_aggregated_field_wells {
                properties.insert(
                    "LineChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartlinestylesettings.html
    pub struct LineChartLineStyleSettings_ {
        pub line_interpolation: Option<crate::value::ExpString>,
        pub line_style: Option<crate::value::ExpString>,
        pub line_visibility: Option<crate::value::ExpString>,
        pub line_width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartLineStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartLineStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartLineStyleSettings as LineChartLineStyleSettings;
    impl crate::value::ToValue for LineChartLineStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_interpolation {
                properties.insert(
                    "LineInterpolation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_style {
                properties.insert(
                    "LineStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_visibility {
                properties.insert(
                    "LineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartmarkerstylesettings.html
    pub struct LineChartMarkerStyleSettings_ {
        pub marker_color: Option<crate::value::ExpString>,
        pub marker_shape: Option<crate::value::ExpString>,
        pub marker_size: Option<crate::value::ExpString>,
        pub marker_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartMarkerStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartMarkerStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartMarkerStyleSettings as LineChartMarkerStyleSettings;
    impl crate::value::ToValue for LineChartMarkerStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.marker_color {
                properties.insert(
                    "MarkerColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_shape {
                properties.insert(
                    "MarkerShape".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_size {
                properties.insert(
                    "MarkerSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_visibility {
                properties.insert(
                    "MarkerVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartseriessettings.html
    pub struct LineChartSeriesSettings_ {
        pub line_style_settings: Option<Box<LineChartLineStyleSettings_>>,
        pub marker_style_settings: Option<Box<LineChartMarkerStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartSeriesSettings as LineChartSeriesSettings;
    impl crate::value::ToValue for LineChartSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_style_settings {
                properties.insert(
                    "LineStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_style_settings {
                properties.insert(
                    "MarkerStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartsortconfiguration.html
    pub struct LineChartSortConfiguration_ {
        pub category_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartSortConfiguration as LineChartSortConfiguration;
    impl crate::value::ToValue for LineChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit_configuration {
                properties.insert(
                    "CategoryItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit_configuration {
                properties.insert(
                    "ColorItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linechartvisual.html
    pub struct LineChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<LineChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineChartVisual as LineChartVisual;
    impl crate::value::ToValue for LineChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-lineseriesaxisdisplayoptions.html
    pub struct LineSeriesAxisDisplayOptions_ {
        pub axis_options: Option<Box<AxisDisplayOptions_>>,
        pub missing_data_configurations: Option<Vec<MissingDataConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LineSeriesAxisDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LineSeriesAxisDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LineSeriesAxisDisplayOptions as LineSeriesAxisDisplayOptions;
    impl crate::value::ToValue for LineSeriesAxisDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_options {
                properties.insert(
                    "AxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.missing_data_configurations {
                properties.insert(
                    "MissingDataConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-linksharingconfiguration.html
    pub struct LinkSharingConfiguration_ {
        pub permissions: Option<Vec<ResourcePermission_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LinkSharingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LinkSharingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LinkSharingConfiguration as LinkSharingConfiguration;
    impl crate::value::ToValue for LinkSharingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.permissions {
                properties.insert(
                    "Permissions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-listcontroldisplayoptions.html
    pub struct ListControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub search_options: Option<Box<ListControlSearchOptions_>>,
        pub select_all_options: Option<Box<ListControlSelectAllOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ListControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ListControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ListControlDisplayOptions as ListControlDisplayOptions;
    impl crate::value::ToValue for ListControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.search_options {
                properties.insert(
                    "SearchOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-listcontrolsearchoptions.html
    pub struct ListControlSearchOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ListControlSearchOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ListControlSearchOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ListControlSearchOptions as ListControlSearchOptions;
    impl crate::value::ToValue for ListControlSearchOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-listcontrolselectalloptions.html
    pub struct ListControlSelectAllOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ListControlSelectAllOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ListControlSelectAllOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ListControlSelectAllOptions as ListControlSelectAllOptions;
    impl crate::value::ToValue for ListControlSelectAllOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-loadinganimation.html
    pub struct LoadingAnimation_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LoadingAnimation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LoadingAnimation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LoadingAnimation as LoadingAnimation;
    impl crate::value::ToValue for LoadingAnimation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-localnavigationconfiguration.html
    pub struct LocalNavigationConfiguration_ {
        pub target_sheet_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LocalNavigationConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LocalNavigationConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LocalNavigationConfiguration as LocalNavigationConfiguration;
    impl crate::value::ToValue for LocalNavigationConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "TargetSheetId".to_string(),
                crate::value::ToValue::to_value(&self.target_sheet_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-longformattext.html
    pub struct LongFormatText_ {
        pub plain_text: Option<crate::value::ExpString>,
        pub rich_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_LongFormatText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.LongFormatText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_LongFormatText as LongFormatText;
    impl crate::value::ToValue for LongFormatText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rich_text {
                properties.insert(
                    "RichText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-mappeddatasetparameter.html
    pub struct MappedDataSetParameter_ {
        pub data_set_identifier: crate::value::ExpString,
        pub data_set_parameter_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MappedDataSetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MappedDataSetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MappedDataSetParameter as MappedDataSetParameter;
    impl crate::value::ToValue for MappedDataSetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "DataSetParameterName".to_string(),
                crate::value::ToValue::to_value(&self.data_set_parameter_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-maximumlabeltype.html
    pub struct MaximumLabelType_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MaximumLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MaximumLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MaximumLabelType as MaximumLabelType;
    impl crate::value::ToValue for MaximumLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-maximumminimumcomputation.html
    pub struct MaximumMinimumComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MaximumMinimumComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MaximumMinimumComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MaximumMinimumComputation as MaximumMinimumComputation;
    impl crate::value::ToValue for MaximumMinimumComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-measurefield.html
    pub struct MeasureField_ {
        pub calculated_measure_field: Option<Box<CalculatedMeasureField_>>,
        pub categorical_measure_field: Option<Box<CategoricalMeasureField_>>,
        pub date_measure_field: Option<Box<DateMeasureField_>>,
        pub numerical_measure_field: Option<Box<NumericalMeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MeasureField as MeasureField;
    impl crate::value::ToValue for MeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.calculated_measure_field {
                properties.insert(
                    "CalculatedMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categorical_measure_field {
                properties.insert(
                    "CategoricalMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_measure_field {
                properties.insert(
                    "DateMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_measure_field {
                properties.insert(
                    "NumericalMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-metriccomparisoncomputation.html
    pub struct MetricComparisonComputation_ {
        pub computation_id: crate::value::ExpString,
        pub from_value: Option<Box<MeasureField_>>,
        pub name: Option<crate::value::ExpString>,
        pub target_value: Option<Box<MeasureField_>>,
        pub time: Option<Box<DimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MetricComparisonComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MetricComparisonComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MetricComparisonComputation as MetricComparisonComputation;
    impl crate::value::ToValue for MetricComparisonComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.from_value {
                properties.insert(
                    "FromValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.target_value {
                properties.insert(
                    "TargetValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-minimumlabeltype.html
    pub struct MinimumLabelType_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MinimumLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MinimumLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MinimumLabelType as MinimumLabelType;
    impl crate::value::ToValue for MinimumLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-missingdataconfiguration.html
    pub struct MissingDataConfiguration_ {
        pub treatment_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_MissingDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.MissingDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_MissingDataConfiguration as MissingDataConfiguration;
    impl crate::value::ToValue for MissingDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.treatment_option {
                properties.insert(
                    "TreatmentOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-negativevalueconfiguration.html
    pub struct NegativeValueConfiguration_ {
        pub display_mode: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NegativeValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NegativeValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NegativeValueConfiguration as NegativeValueConfiguration;
    impl crate::value::ToValue for NegativeValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DisplayMode".to_string(),
                crate::value::ToValue::to_value(&self.display_mode),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-nestedfilter.html
    pub struct NestedFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub filter_id: crate::value::ExpString,
        pub include_inner_set: crate::value::ExpBool,
        pub inner_filter: Box<InnerFilter_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NestedFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NestedFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NestedFilter as NestedFilter;
    impl crate::value::ToValue for NestedFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.insert(
                "IncludeInnerSet".to_string(),
                crate::value::ToValue::to_value(&self.include_inner_set),
            );
            properties.insert(
                "InnerFilter".to_string(),
                crate::value::ToValue::to_value(&self.inner_filter),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-nullvalueformatconfiguration.html
    pub struct NullValueFormatConfiguration_ {
        pub null_string: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NullValueFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NullValueFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NullValueFormatConfiguration as NullValueFormatConfiguration;
    impl crate::value::ToValue for NullValueFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "NullString".to_string(),
                crate::value::ToValue::to_value(&self.null_string),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numberdisplayformatconfiguration.html
    pub struct NumberDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub number_scale: Option<crate::value::ExpString>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumberDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumberDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumberDisplayFormatConfiguration as NumberDisplayFormatConfiguration;
    impl crate::value::ToValue for NumberDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_scale {
                properties.insert(
                    "NumberScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numberformatconfiguration.html
    pub struct NumberFormatConfiguration_ {
        pub format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumberFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumberFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumberFormatConfiguration as NumberFormatConfiguration;
    impl crate::value::ToValue for NumberFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericaxisoptions.html
    pub struct NumericAxisOptions_ {
        pub range: Option<Box<AxisDisplayRange_>>,
        pub scale: Option<Box<AxisScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericAxisOptions as NumericAxisOptions;
    impl crate::value::ToValue for NumericAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.range {
                properties.insert("Range".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.scale {
                properties.insert("Scale".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericequalitydrilldownfilter.html
    pub struct NumericEqualityDrillDownFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericEqualityDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericEqualityDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericEqualityDrillDownFilter as NumericEqualityDrillDownFilter;
    impl crate::value::ToValue for NumericEqualityDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericequalityfilter.html
    pub struct NumericEqualityFilter_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericEqualityFilter as NumericEqualityFilter;
    impl crate::value::ToValue for NumericEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericformatconfiguration.html
    pub struct NumericFormatConfiguration_ {
        pub currency_display_format_configuration: Option<Box<CurrencyDisplayFormatConfiguration_>>,
        pub number_display_format_configuration: Option<Box<NumberDisplayFormatConfiguration_>>,
        pub percentage_display_format_configuration:
            Option<Box<PercentageDisplayFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericFormatConfiguration as NumericFormatConfiguration;
    impl crate::value::ToValue for NumericFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.currency_display_format_configuration {
                properties.insert(
                    "CurrencyDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_display_format_configuration {
                properties.insert(
                    "NumberDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentage_display_format_configuration {
                properties.insert(
                    "PercentageDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericrangefilter.html
    pub struct NumericRangeFilter_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub null_option: crate::value::ExpString,
        pub range_maximum: Option<Box<NumericRangeFilterValue_>>,
        pub range_minimum: Option<Box<NumericRangeFilterValue_>>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericRangeFilter as NumericRangeFilter;
    impl crate::value::ToValue for NumericRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.range_maximum {
                properties.insert(
                    "RangeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum {
                properties.insert(
                    "RangeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericrangefiltervalue.html
    pub struct NumericRangeFilterValue_ {
        pub parameter: Option<crate::value::ExpString>,
        pub static_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericRangeFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericRangeFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericRangeFilterValue as NumericRangeFilterValue;
    impl crate::value::ToValue for NumericRangeFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.parameter {
                properties.insert(
                    "Parameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericseparatorconfiguration.html
    pub struct NumericSeparatorConfiguration_ {
        pub decimal_separator: Option<crate::value::ExpString>,
        pub thousands_separator: Option<Box<ThousandSeparatorOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericSeparatorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericSeparatorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericSeparatorConfiguration as NumericSeparatorConfiguration;
    impl crate::value::ToValue for NumericSeparatorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_separator {
                properties.insert(
                    "DecimalSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.thousands_separator {
                properties.insert(
                    "ThousandsSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericalaggregationfunction.html
    pub struct NumericalAggregationFunction_ {
        pub percentile_aggregation: Option<Box<PercentileAggregation_>>,
        pub simple_numerical_aggregation: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericalAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericalAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericalAggregationFunction as NumericalAggregationFunction;
    impl crate::value::ToValue for NumericalAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percentile_aggregation {
                properties.insert(
                    "PercentileAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.simple_numerical_aggregation {
                properties.insert(
                    "SimpleNumericalAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericaldimensionfield.html
    pub struct NumericalDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<NumberFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericalDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericalDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericalDimensionField as NumericalDimensionField;
    impl crate::value::ToValue for NumericalDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-numericalmeasurefield.html
    pub struct NumericalMeasureField_ {
        pub aggregation_function: Option<Box<NumericalAggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<NumberFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_NumericalMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.NumericalMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_NumericalMeasureField as NumericalMeasureField;
    impl crate::value::ToValue for NumericalMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-paginationconfiguration.html
    pub struct PaginationConfiguration_ {
        pub page_number: f64,
        pub page_size: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PaginationConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PaginationConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PaginationConfiguration as PaginationConfiguration;
    impl crate::value::ToValue for PaginationConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "PageNumber".to_string(),
                crate::value::ToValue::to_value(&self.page_number),
            );
            properties.insert(
                "PageSize".to_string(),
                crate::value::ToValue::to_value(&self.page_size),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-panelconfiguration.html
    pub struct PanelConfiguration_ {
        pub background_color: Option<crate::value::ExpString>,
        pub background_visibility: Option<crate::value::ExpString>,
        pub border_color: Option<crate::value::ExpString>,
        pub border_style: Option<crate::value::ExpString>,
        pub border_thickness: Option<crate::value::ExpString>,
        pub border_visibility: Option<crate::value::ExpString>,
        pub gutter_spacing: Option<crate::value::ExpString>,
        pub gutter_visibility: Option<crate::value::ExpString>,
        pub title: Option<Box<PanelTitleOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PanelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PanelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PanelConfiguration as PanelConfiguration;
    impl crate::value::ToValue for PanelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.background_visibility {
                properties.insert(
                    "BackgroundVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_color {
                properties.insert(
                    "BorderColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_thickness {
                properties.insert(
                    "BorderThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_visibility {
                properties.insert(
                    "BorderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gutter_spacing {
                properties.insert(
                    "GutterSpacing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gutter_visibility {
                properties.insert(
                    "GutterVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-paneltitleoptions.html
    pub struct PanelTitleOptions_ {
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub horizontal_text_alignment: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PanelTitleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PanelTitleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PanelTitleOptions as PanelTitleOptions;
    impl crate::value::ToValue for PanelTitleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.horizontal_text_alignment {
                properties.insert(
                    "HorizontalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parametercontrol.html
    pub struct ParameterControl_ {
        pub date_time_picker: Option<Box<ParameterDateTimePickerControl_>>,
        pub dropdown: Option<Box<ParameterDropDownControl_>>,
        pub list: Option<Box<ParameterListControl_>>,
        pub slider: Option<Box<ParameterSliderControl_>>,
        pub text_area: Option<Box<ParameterTextAreaControl_>>,
        pub text_field: Option<Box<ParameterTextFieldControl_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterControl as ParameterControl;
    impl crate::value::ToValue for ParameterControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_picker {
                properties.insert(
                    "DateTimePicker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dropdown {
                properties.insert(
                    "Dropdown".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list {
                properties.insert("List".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.slider {
                properties.insert("Slider".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_area {
                properties.insert(
                    "TextArea".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_field {
                properties.insert(
                    "TextField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameterdatetimepickercontrol.html
    pub struct ParameterDateTimePickerControl_ {
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterDateTimePickerControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterDateTimePickerControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterDateTimePickerControl as ParameterDateTimePickerControl;
    impl crate::value::ToValue for ParameterDateTimePickerControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameterdeclaration.html
    pub struct ParameterDeclaration_ {
        pub date_time_parameter_declaration: Option<Box<DateTimeParameterDeclaration_>>,
        pub decimal_parameter_declaration: Option<Box<DecimalParameterDeclaration_>>,
        pub integer_parameter_declaration: Option<Box<IntegerParameterDeclaration_>>,
        pub string_parameter_declaration: Option<Box<StringParameterDeclaration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterDeclaration as ParameterDeclaration;
    impl crate::value::ToValue for ParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_parameter_declaration {
                properties.insert(
                    "DateTimeParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_parameter_declaration {
                properties.insert(
                    "DecimalParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_parameter_declaration {
                properties.insert(
                    "IntegerParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_parameter_declaration {
                properties.insert(
                    "StringParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameterdropdowncontrol.html
    pub struct ParameterDropDownControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<ParameterSelectableValues_>>,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterDropDownControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterDropDownControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterDropDownControl as ParameterDropDownControl;
    impl crate::value::ToValue for ParameterDropDownControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameterlistcontrol.html
    pub struct ParameterListControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<ParameterSelectableValues_>>,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterListControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterListControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterListControl as ParameterListControl;
    impl crate::value::ToValue for ParameterListControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameterselectablevalues.html
    pub struct ParameterSelectableValues_ {
        pub link_to_data_set_column: Option<Box<ColumnIdentifier_>>,
        pub values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterSelectableValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterSelectableValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterSelectableValues as ParameterSelectableValues;
    impl crate::value::ToValue for ParameterSelectableValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.link_to_data_set_column {
                properties.insert(
                    "LinkToDataSetColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameterslidercontrol.html
    pub struct ParameterSliderControl_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub step_size: f64,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterSliderControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterSliderControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterSliderControl as ParameterSliderControl;
    impl crate::value::ToValue for ParameterSliderControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parametertextareacontrol.html
    pub struct ParameterTextAreaControl_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterTextAreaControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterTextAreaControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterTextAreaControl as ParameterTextAreaControl;
    impl crate::value::ToValue for ParameterTextAreaControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parametertextfieldcontrol.html
    pub struct ParameterTextFieldControl_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ParameterTextFieldControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ParameterTextFieldControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ParameterTextFieldControl as ParameterTextFieldControl;
    impl crate::value::ToValue for ParameterTextFieldControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameters.html
    pub struct Parameters_ {
        pub date_time_parameters: Option<Vec<DateTimeParameter_>>,
        pub decimal_parameters: Option<Vec<DecimalParameter_>>,
        pub integer_parameters: Option<Vec<IntegerParameter_>>,
        pub string_parameters: Option<Vec<StringParameter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Parameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Parameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Parameters as Parameters;
    impl crate::value::ToValue for Parameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_parameters {
                properties.insert(
                    "DateTimeParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_parameters {
                properties.insert(
                    "DecimalParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_parameters {
                properties.insert(
                    "IntegerParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_parameters {
                properties.insert(
                    "StringParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-percentvisiblerange.html
    pub struct PercentVisibleRange_ {
        pub from: Option<f64>,
        pub to: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PercentVisibleRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PercentVisibleRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PercentVisibleRange as PercentVisibleRange;
    impl crate::value::ToValue for PercentVisibleRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.from {
                properties.insert("From".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.to {
                properties.insert("To".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-percentagedisplayformatconfiguration.html
    pub struct PercentageDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PercentageDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PercentageDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PercentageDisplayFormatConfiguration as PercentageDisplayFormatConfiguration;
    impl crate::value::ToValue for PercentageDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-percentileaggregation.html
    pub struct PercentileAggregation_ {
        pub percentile_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PercentileAggregation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PercentileAggregation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PercentileAggregation as PercentileAggregation;
    impl crate::value::ToValue for PercentileAggregation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percentile_value {
                properties.insert(
                    "PercentileValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-periodoverperiodcomputation.html
    pub struct PeriodOverPeriodComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PeriodOverPeriodComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PeriodOverPeriodComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PeriodOverPeriodComputation as PeriodOverPeriodComputation;
    impl crate::value::ToValue for PeriodOverPeriodComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-periodtodatecomputation.html
    pub struct PeriodToDateComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub period_time_granularity: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PeriodToDateComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PeriodToDateComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PeriodToDateComputation as PeriodToDateComputation;
    impl crate::value::ToValue for PeriodToDateComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.period_time_granularity {
                properties.insert(
                    "PeriodTimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-piechartaggregatedfieldwells.html
    pub struct PieChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PieChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PieChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PieChartAggregatedFieldWells as PieChartAggregatedFieldWells;
    impl crate::value::ToValue for PieChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-piechartconfiguration.html
    pub struct PieChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub donut_options: Option<Box<DonutOptions_>>,
        pub field_wells: Option<Box<PieChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<PieChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PieChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PieChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PieChartConfiguration as PieChartConfiguration;
    impl crate::value::ToValue for PieChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.donut_options {
                properties.insert(
                    "DonutOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-piechartfieldwells.html
    pub struct PieChartFieldWells_ {
        pub pie_chart_aggregated_field_wells: Option<Box<PieChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PieChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PieChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PieChartFieldWells as PieChartFieldWells;
    impl crate::value::ToValue for PieChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pie_chart_aggregated_field_wells {
                properties.insert(
                    "PieChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-piechartsortconfiguration.html
    pub struct PieChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PieChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PieChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PieChartSortConfiguration as PieChartSortConfiguration;
    impl crate::value::ToValue for PieChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-piechartvisual.html
    pub struct PieChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<PieChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PieChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PieChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PieChartVisual as PieChartVisual;
    impl crate::value::ToValue for PieChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivotfieldsortoptions.html
    pub struct PivotFieldSortOptions_ {
        pub field_id: crate::value::ExpString,
        pub sort_by: Box<PivotTableSortBy_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotFieldSortOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotFieldSortOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotFieldSortOptions as PivotFieldSortOptions;
    impl crate::value::ToValue for PivotFieldSortOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.insert(
                "SortBy".to_string(),
                crate::value::ToValue::to_value(&self.sort_by),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottableaggregatedfieldwells.html
    pub struct PivotTableAggregatedFieldWells_ {
        pub columns: Option<Vec<DimensionField_>>,
        pub rows: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableAggregatedFieldWells as PivotTableAggregatedFieldWells;
    impl crate::value::ToValue for PivotTableAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows {
                properties.insert("Rows".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablecellconditionalformatting.html
    pub struct PivotTableCellConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub scope: Option<Box<PivotTableConditionalFormattingScope_>>,
        pub scopes: Option<Vec<PivotTableConditionalFormattingScope_>>,
        pub text_format: Option<Box<TextConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableCellConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableCellConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableCellConditionalFormatting as PivotTableCellConditionalFormatting;
    impl crate::value::ToValue for PivotTableCellConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.scope {
                properties.insert("Scope".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.scopes {
                properties.insert("Scopes".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_format {
                properties.insert(
                    "TextFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottableconditionalformatting.html
    pub struct PivotTableConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<PivotTableConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableConditionalFormatting as PivotTableConditionalFormatting;
    impl crate::value::ToValue for PivotTableConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottableconditionalformattingoption.html
    pub struct PivotTableConditionalFormattingOption_ {
        pub cell: Option<Box<PivotTableCellConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableConditionalFormattingOption as PivotTableConditionalFormattingOption;
    impl crate::value::ToValue for PivotTableConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell {
                properties.insert("Cell".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottableconditionalformattingscope.html
    pub struct PivotTableConditionalFormattingScope_ {
        pub role: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableConditionalFormattingScope {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableConditionalFormattingScope"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableConditionalFormattingScope as PivotTableConditionalFormattingScope;
    impl crate::value::ToValue for PivotTableConditionalFormattingScope_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.role {
                properties.insert("Role".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottableconfiguration.html
    pub struct PivotTableConfiguration_ {
        pub field_options: Option<Box<PivotTableFieldOptions_>>,
        pub field_wells: Option<Box<PivotTableFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub paginated_report_options: Option<Box<PivotTablePaginatedReportOptions_>>,
        pub sort_configuration: Option<Box<PivotTableSortConfiguration_>>,
        pub table_options: Option<Box<PivotTableOptions_>>,
        pub total_options: Option<Box<PivotTableTotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableConfiguration as PivotTableConfiguration;
    impl crate::value::ToValue for PivotTableConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_options {
                properties.insert(
                    "FieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_report_options {
                properties.insert(
                    "PaginatedReportOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_options {
                properties.insert(
                    "TableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_options {
                properties.insert(
                    "TotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottabledatapathoption.html
    pub struct PivotTableDataPathOption_ {
        pub data_path_list: Vec<DataPathValue_>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableDataPathOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableDataPathOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableDataPathOption as PivotTableDataPathOption;
    impl crate::value::ToValue for PivotTableDataPathOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataPathList".to_string(),
                crate::value::ToValue::to_value(&self.data_path_list),
            );
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablefieldcollapsestateoption.html
    pub struct PivotTableFieldCollapseStateOption_ {
        pub state: Option<crate::value::ExpString>,
        pub target: Box<PivotTableFieldCollapseStateTarget_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableFieldCollapseStateOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableFieldCollapseStateOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableFieldCollapseStateOption as PivotTableFieldCollapseStateOption;
    impl crate::value::ToValue for PivotTableFieldCollapseStateOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.state {
                properties.insert("State".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Target".to_string(),
                crate::value::ToValue::to_value(&self.target),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablefieldcollapsestatetarget.html
    pub struct PivotTableFieldCollapseStateTarget_ {
        pub field_data_path_values: Option<Vec<DataPathValue_>>,
        pub field_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableFieldCollapseStateTarget {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableFieldCollapseStateTarget"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableFieldCollapseStateTarget as PivotTableFieldCollapseStateTarget;
    impl crate::value::ToValue for PivotTableFieldCollapseStateTarget_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_data_path_values {
                properties.insert(
                    "FieldDataPathValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablefieldoption.html
    pub struct PivotTableFieldOption_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableFieldOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableFieldOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableFieldOption as PivotTableFieldOption;
    impl crate::value::ToValue for PivotTableFieldOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablefieldoptions.html
    pub struct PivotTableFieldOptions_ {
        pub collapse_state_options: Option<Vec<PivotTableFieldCollapseStateOption_>>,
        pub data_path_options: Option<Vec<PivotTableDataPathOption_>>,
        pub selected_field_options: Option<Vec<PivotTableFieldOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableFieldOptions as PivotTableFieldOptions;
    impl crate::value::ToValue for PivotTableFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.collapse_state_options {
                properties.insert(
                    "CollapseStateOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_path_options {
                properties.insert(
                    "DataPathOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablefieldsubtotaloptions.html
    pub struct PivotTableFieldSubtotalOptions_ {
        pub field_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableFieldSubtotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableFieldSubtotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableFieldSubtotalOptions as PivotTableFieldSubtotalOptions;
    impl crate::value::ToValue for PivotTableFieldSubtotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablefieldwells.html
    pub struct PivotTableFieldWells_ {
        pub pivot_table_aggregated_field_wells: Option<Box<PivotTableAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableFieldWells as PivotTableFieldWells;
    impl crate::value::ToValue for PivotTableFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pivot_table_aggregated_field_wells {
                properties.insert(
                    "PivotTableAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottableoptions.html
    pub struct PivotTableOptions_ {
        pub cell_style: Option<Box<TableCellStyle_>>,
        pub collapsed_row_dimensions_visibility: Option<crate::value::ExpString>,
        pub column_header_style: Option<Box<TableCellStyle_>>,
        pub column_names_visibility: Option<crate::value::ExpString>,
        pub default_cell_width: Option<crate::value::ExpString>,
        pub metric_placement: Option<crate::value::ExpString>,
        pub row_alternate_color_options: Option<Box<RowAlternateColorOptions_>>,
        pub row_field_names_style: Option<Box<TableCellStyle_>>,
        pub row_header_style: Option<Box<TableCellStyle_>>,
        pub rows_label_options: Option<Box<PivotTableRowsLabelOptions_>>,
        pub rows_layout: Option<crate::value::ExpString>,
        pub single_metric_visibility: Option<crate::value::ExpString>,
        pub toggle_buttons_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableOptions as PivotTableOptions;
    impl crate::value::ToValue for PivotTableOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_style {
                properties.insert(
                    "CellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.collapsed_row_dimensions_visibility {
                properties.insert(
                    "CollapsedRowDimensionsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_header_style {
                properties.insert(
                    "ColumnHeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_names_visibility {
                properties.insert(
                    "ColumnNamesVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_cell_width {
                properties.insert(
                    "DefaultCellWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_placement {
                properties.insert(
                    "MetricPlacement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_alternate_color_options {
                properties.insert(
                    "RowAlternateColorOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_field_names_style {
                properties.insert(
                    "RowFieldNamesStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_header_style {
                properties.insert(
                    "RowHeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows_label_options {
                properties.insert(
                    "RowsLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows_layout {
                properties.insert(
                    "RowsLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.single_metric_visibility {
                properties.insert(
                    "SingleMetricVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.toggle_buttons_visibility {
                properties.insert(
                    "ToggleButtonsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablepaginatedreportoptions.html
    pub struct PivotTablePaginatedReportOptions_ {
        pub overflow_column_header_visibility: Option<crate::value::ExpString>,
        pub vertical_overflow_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTablePaginatedReportOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTablePaginatedReportOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTablePaginatedReportOptions as PivotTablePaginatedReportOptions;
    impl crate::value::ToValue for PivotTablePaginatedReportOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.overflow_column_header_visibility {
                properties.insert(
                    "OverflowColumnHeaderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_overflow_visibility {
                properties.insert(
                    "VerticalOverflowVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablerowslabeloptions.html
    pub struct PivotTableRowsLabelOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableRowsLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableRowsLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableRowsLabelOptions as PivotTableRowsLabelOptions;
    impl crate::value::ToValue for PivotTableRowsLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablesortby.html
    pub struct PivotTableSortBy_ {
        pub column: Option<Box<ColumnSort_>>,
        pub data_path: Option<Box<DataPathSort_>>,
        pub field: Option<Box<FieldSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableSortBy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableSortBy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableSortBy as PivotTableSortBy;
    impl crate::value::ToValue for PivotTableSortBy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column {
                properties.insert("Column".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_path {
                properties.insert(
                    "DataPath".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field {
                properties.insert("Field".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablesortconfiguration.html
    pub struct PivotTableSortConfiguration_ {
        pub field_sort_options: Option<Vec<PivotFieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableSortConfiguration as PivotTableSortConfiguration;
    impl crate::value::ToValue for PivotTableSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_sort_options {
                properties.insert(
                    "FieldSortOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottabletotaloptions.html
    pub struct PivotTableTotalOptions_ {
        pub column_subtotal_options: Option<Box<SubtotalOptions_>>,
        pub column_total_options: Option<Box<PivotTotalOptions_>>,
        pub row_subtotal_options: Option<Box<SubtotalOptions_>>,
        pub row_total_options: Option<Box<PivotTotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableTotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableTotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableTotalOptions as PivotTableTotalOptions;
    impl crate::value::ToValue for PivotTableTotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_subtotal_options {
                properties.insert(
                    "ColumnSubtotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_total_options {
                properties.insert(
                    "ColumnTotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_subtotal_options {
                properties.insert(
                    "RowSubtotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_total_options {
                properties.insert(
                    "RowTotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottablevisual.html
    pub struct PivotTableVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<PivotTableConfiguration_>>,
        pub conditional_formatting: Option<Box<PivotTableConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTableVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTableVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTableVisual as PivotTableVisual;
    impl crate::value::ToValue for PivotTableVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pivottotaloptions.html
    pub struct PivotTotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub metric_header_cell_style: Option<Box<TableCellStyle_>>,
        pub placement: Option<crate::value::ExpString>,
        pub scroll_status: Option<crate::value::ExpString>,
        pub total_aggregation_options: Option<Vec<TotalAggregationOption_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<crate::value::ExpString>,
        pub value_cell_style: Option<Box<TableCellStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PivotTotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PivotTotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PivotTotalOptions as PivotTotalOptions;
    impl crate::value::ToValue for PivotTotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_header_cell_style {
                properties.insert(
                    "MetricHeaderCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scroll_status {
                properties.insert(
                    "ScrollStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation_options {
                properties.insert(
                    "TotalAggregationOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_cell_style {
                properties.insert(
                    "ValueCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisual.html
    pub struct PluginVisual_ {
        pub chart_configuration: Option<Box<PluginVisualConfiguration_>>,
        pub plugin_arn: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisual as PluginVisual;
    impl crate::value::ToValue for PluginVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PluginArn".to_string(),
                crate::value::ToValue::to_value(&self.plugin_arn),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualconfiguration.html
    pub struct PluginVisualConfiguration_ {
        pub field_wells: Option<Vec<PluginVisualFieldWell_>>,
        pub sort_configuration: Option<Box<PluginVisualSortConfiguration_>>,
        pub visual_options: Option<Box<PluginVisualOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualConfiguration as PluginVisualConfiguration;
    impl crate::value::ToValue for PluginVisualConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_options {
                properties.insert(
                    "VisualOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualfieldwell.html
    pub struct PluginVisualFieldWell_ {
        pub axis_name: Option<crate::value::ExpString>,
        pub dimensions: Option<Vec<DimensionField_>>,
        pub measures: Option<Vec<MeasureField_>>,
        pub unaggregated: Option<Vec<UnaggregatedField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualFieldWell {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualFieldWell"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualFieldWell as PluginVisualFieldWell;
    impl crate::value::ToValue for PluginVisualFieldWell_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_name {
                properties.insert(
                    "AxisName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dimensions {
                properties.insert(
                    "Dimensions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measures {
                properties.insert(
                    "Measures".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unaggregated {
                properties.insert(
                    "Unaggregated".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualitemslimitconfiguration.html
    pub struct PluginVisualItemsLimitConfiguration_ {
        pub items_limit: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualItemsLimitConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualItemsLimitConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualItemsLimitConfiguration as PluginVisualItemsLimitConfiguration;
    impl crate::value::ToValue for PluginVisualItemsLimitConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit {
                properties.insert(
                    "ItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualoptions.html
    pub struct PluginVisualOptions_ {
        pub visual_properties: Option<Vec<PluginVisualProperty_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualOptions as PluginVisualOptions;
    impl crate::value::ToValue for PluginVisualOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visual_properties {
                properties.insert(
                    "VisualProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualproperty.html
    pub struct PluginVisualProperty_ {
        pub name: Option<crate::value::ExpString>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualProperty {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualProperty"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualProperty as PluginVisualProperty;
    impl crate::value::ToValue for PluginVisualProperty_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualsortconfiguration.html
    pub struct PluginVisualSortConfiguration_ {
        pub plugin_visual_table_query_sort: Option<Box<PluginVisualTableQuerySort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualSortConfiguration as PluginVisualSortConfiguration;
    impl crate::value::ToValue for PluginVisualSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plugin_visual_table_query_sort {
                properties.insert(
                    "PluginVisualTableQuerySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-pluginvisualtablequerysort.html
    pub struct PluginVisualTableQuerySort_ {
        pub items_limit_configuration: Option<Box<PluginVisualItemsLimitConfiguration_>>,
        pub row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PluginVisualTableQuerySort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PluginVisualTableQuerySort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PluginVisualTableQuerySort as PluginVisualTableQuerySort;
    impl crate::value::ToValue for PluginVisualTableQuerySort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit_configuration {
                properties.insert(
                    "ItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_sort {
                properties.insert(
                    "RowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-predefinedhierarchy.html
    pub struct PredefinedHierarchy_ {
        pub columns: Vec<ColumnIdentifier_>,
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_PredefinedHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.PredefinedHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_PredefinedHierarchy as PredefinedHierarchy;
    impl crate::value::ToValue for PredefinedHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-progressbaroptions.html
    pub struct ProgressBarOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ProgressBarOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ProgressBarOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ProgressBarOptions as ProgressBarOptions;
    impl crate::value::ToValue for ProgressBarOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-quicksuiteactionsoption.html
    pub struct QuickSuiteActionsOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_QuickSuiteActionsOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.QuickSuiteActionsOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_QuickSuiteActionsOption as QuickSuiteActionsOption;
    impl crate::value::ToValue for QuickSuiteActionsOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartaggregatedfieldwells.html
    pub struct RadarChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub color: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartAggregatedFieldWells as RadarChartAggregatedFieldWells;
    impl crate::value::ToValue for RadarChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartareastylesettings.html
    pub struct RadarChartAreaStyleSettings_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartAreaStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartAreaStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartAreaStyleSettings as RadarChartAreaStyleSettings;
    impl crate::value::ToValue for RadarChartAreaStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartconfiguration.html
    pub struct RadarChartConfiguration_ {
        pub alternate_band_colors_visibility: Option<crate::value::ExpString>,
        pub alternate_band_even_color: Option<crate::value::ExpString>,
        pub alternate_band_odd_color: Option<crate::value::ExpString>,
        pub axes_range_scale: Option<crate::value::ExpString>,
        pub base_series_settings: Option<Box<RadarChartSeriesSettings_>>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_axis: Option<Box<AxisDisplayOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<RadarChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub shape: Option<crate::value::ExpString>,
        pub sort_configuration: Option<Box<RadarChartSortConfiguration_>>,
        pub start_angle: Option<f64>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartConfiguration as RadarChartConfiguration;
    impl crate::value::ToValue for RadarChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alternate_band_colors_visibility {
                properties.insert(
                    "AlternateBandColorsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.alternate_band_even_color {
                properties.insert(
                    "AlternateBandEvenColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.alternate_band_odd_color {
                properties.insert(
                    "AlternateBandOddColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.axes_range_scale {
                properties.insert(
                    "AxesRangeScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_series_settings {
                properties.insert(
                    "BaseSeriesSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_axis {
                properties.insert(
                    "ColorAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.shape {
                properties.insert("Shape".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_angle {
                properties.insert(
                    "StartAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartfieldwells.html
    pub struct RadarChartFieldWells_ {
        pub radar_chart_aggregated_field_wells: Option<Box<RadarChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartFieldWells as RadarChartFieldWells;
    impl crate::value::ToValue for RadarChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.radar_chart_aggregated_field_wells {
                properties.insert(
                    "RadarChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartseriessettings.html
    pub struct RadarChartSeriesSettings_ {
        pub area_style_settings: Option<Box<RadarChartAreaStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartSeriesSettings as RadarChartSeriesSettings;
    impl crate::value::ToValue for RadarChartSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.area_style_settings {
                properties.insert(
                    "AreaStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartsortconfiguration.html
    pub struct RadarChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartSortConfiguration as RadarChartSortConfiguration;
    impl crate::value::ToValue for RadarChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-radarchartvisual.html
    pub struct RadarChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<RadarChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RadarChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RadarChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RadarChartVisual as RadarChartVisual;
    impl crate::value::ToValue for RadarChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-rangeendslabeltype.html
    pub struct RangeEndsLabelType_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RangeEndsLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RangeEndsLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RangeEndsLabelType as RangeEndsLabelType;
    impl crate::value::ToValue for RangeEndsLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referenceline.html
    pub struct ReferenceLine_ {
        pub data_configuration: Box<ReferenceLineDataConfiguration_>,
        pub label_configuration: Option<Box<ReferenceLineLabelConfiguration_>>,
        pub status: Option<crate::value::ExpString>,
        pub style_configuration: Option<Box<ReferenceLineStyleConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLine {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLine"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLine as ReferenceLine;
    impl crate::value::ToValue for ReferenceLine_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.data_configuration),
            );
            if let Some(ref value) = self.label_configuration {
                properties.insert(
                    "LabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.style_configuration {
                properties.insert(
                    "StyleConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinecustomlabelconfiguration.html
    pub struct ReferenceLineCustomLabelConfiguration_ {
        pub custom_label: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineCustomLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineCustomLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineCustomLabelConfiguration as ReferenceLineCustomLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineCustomLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomLabel".to_string(),
                crate::value::ToValue::to_value(&self.custom_label),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinedataconfiguration.html
    pub struct ReferenceLineDataConfiguration_ {
        pub axis_binding: Option<crate::value::ExpString>,
        pub dynamic_configuration: Option<Box<ReferenceLineDynamicDataConfiguration_>>,
        pub series_type: Option<crate::value::ExpString>,
        pub static_configuration: Option<Box<ReferenceLineStaticDataConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineDataConfiguration as ReferenceLineDataConfiguration;
    impl crate::value::ToValue for ReferenceLineDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_binding {
                properties.insert(
                    "AxisBinding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dynamic_configuration {
                properties.insert(
                    "DynamicConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.series_type {
                properties.insert(
                    "SeriesType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_configuration {
                properties.insert(
                    "StaticConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinedynamicdataconfiguration.html
    pub struct ReferenceLineDynamicDataConfiguration_ {
        pub calculation: Box<NumericalAggregationFunction_>,
        pub column: Box<ColumnIdentifier_>,
        pub measure_aggregation_function: Option<Box<AggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineDynamicDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineDynamicDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineDynamicDataConfiguration as ReferenceLineDynamicDataConfiguration;
    impl crate::value::ToValue for ReferenceLineDynamicDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Calculation".to_string(),
                crate::value::ToValue::to_value(&self.calculation),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.measure_aggregation_function {
                properties.insert(
                    "MeasureAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinelabelconfiguration.html
    pub struct ReferenceLineLabelConfiguration_ {
        pub custom_label_configuration: Option<Box<ReferenceLineCustomLabelConfiguration_>>,
        pub font_color: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub horizontal_position: Option<crate::value::ExpString>,
        pub value_label_configuration: Option<Box<ReferenceLineValueLabelConfiguration_>>,
        pub vertical_position: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineLabelConfiguration as ReferenceLineLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label_configuration {
                properties.insert(
                    "CustomLabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_color {
                properties.insert(
                    "FontColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.horizontal_position {
                properties.insert(
                    "HorizontalPosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_configuration {
                properties.insert(
                    "ValueLabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_position {
                properties.insert(
                    "VerticalPosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinestaticdataconfiguration.html
    pub struct ReferenceLineStaticDataConfiguration_ {
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineStaticDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineStaticDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineStaticDataConfiguration as ReferenceLineStaticDataConfiguration;
    impl crate::value::ToValue for ReferenceLineStaticDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinestyleconfiguration.html
    pub struct ReferenceLineStyleConfiguration_ {
        pub color: Option<crate::value::ExpString>,
        pub pattern: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineStyleConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineStyleConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineStyleConfiguration as ReferenceLineStyleConfiguration;
    impl crate::value::ToValue for ReferenceLineStyleConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.pattern {
                properties.insert(
                    "Pattern".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-referencelinevaluelabelconfiguration.html
    pub struct ReferenceLineValueLabelConfiguration_ {
        pub format_configuration: Option<Box<NumericFormatConfiguration_>>,
        pub relative_position: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ReferenceLineValueLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ReferenceLineValueLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ReferenceLineValueLabelConfiguration as ReferenceLineValueLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineValueLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_position {
                properties.insert(
                    "RelativePosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-relativedatetimecontroldisplayoptions.html
    pub struct RelativeDateTimeControlDisplayOptions_ {
        pub date_time_format: Option<crate::value::ExpString>,
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RelativeDateTimeControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RelativeDateTimeControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RelativeDateTimeControlDisplayOptions as RelativeDateTimeControlDisplayOptions;
    impl crate::value::ToValue for RelativeDateTimeControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-relativedatesfilter.html
    pub struct RelativeDatesFilter_ {
        pub anchor_date_configuration: Box<AnchorDateConfiguration_>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub exclude_period_configuration: Option<Box<ExcludePeriodConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub minimum_granularity: Option<crate::value::ExpString>,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub relative_date_type: crate::value::ExpString,
        pub relative_date_value: Option<f64>,
        pub time_granularity: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RelativeDatesFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RelativeDatesFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RelativeDatesFilter as RelativeDatesFilter;
    impl crate::value::ToValue for RelativeDatesFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AnchorDateConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.anchor_date_configuration),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.exclude_period_configuration {
                properties.insert(
                    "ExcludePeriodConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.minimum_granularity {
                properties.insert(
                    "MinimumGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RelativeDateType".to_string(),
                crate::value::ToValue::to_value(&self.relative_date_type),
            );
            if let Some(ref value) = self.relative_date_value {
                properties.insert(
                    "RelativeDateValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TimeGranularity".to_string(),
                crate::value::ToValue::to_value(&self.time_granularity),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-rollingdateconfiguration.html
    pub struct RollingDateConfiguration_ {
        pub data_set_identifier: Option<crate::value::ExpString>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RollingDateConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RollingDateConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RollingDateConfiguration as RollingDateConfiguration;
    impl crate::value::ToValue for RollingDateConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_set_identifier {
                properties.insert(
                    "DataSetIdentifier".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-rowalternatecoloroptions.html
    pub struct RowAlternateColorOptions_ {
        pub row_alternate_colors: Option<Vec<crate::value::ExpString>>,
        pub status: Option<crate::value::ExpString>,
        pub use_primary_background_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_RowAlternateColorOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.RowAlternateColorOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_RowAlternateColorOptions as RowAlternateColorOptions;
    impl crate::value::ToValue for RowAlternateColorOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.row_alternate_colors {
                properties.insert(
                    "RowAlternateColors".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.use_primary_background_color {
                properties.insert(
                    "UsePrimaryBackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-samesheettargetvisualconfiguration.html
    pub struct SameSheetTargetVisualConfiguration_ {
        pub target_visual_options: Option<crate::value::ExpString>,
        pub target_visuals: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SameSheetTargetVisualConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SameSheetTargetVisualConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SameSheetTargetVisualConfiguration as SameSheetTargetVisualConfiguration;
    impl crate::value::ToValue for SameSheetTargetVisualConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_visual_options {
                properties.insert(
                    "TargetVisualOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.target_visuals {
                properties.insert(
                    "TargetVisuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sankeydiagramaggregatedfieldwells.html
    pub struct SankeyDiagramAggregatedFieldWells_ {
        pub destination: Option<Vec<DimensionField_>>,
        pub source: Option<Vec<DimensionField_>>,
        pub weight: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SankeyDiagramAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SankeyDiagramAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SankeyDiagramAggregatedFieldWells as SankeyDiagramAggregatedFieldWells;
    impl crate::value::ToValue for SankeyDiagramAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.destination {
                properties.insert(
                    "Destination".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.weight {
                properties.insert("Weight".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sankeydiagramchartconfiguration.html
    pub struct SankeyDiagramChartConfiguration_ {
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<SankeyDiagramFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<SankeyDiagramSortConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SankeyDiagramChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SankeyDiagramChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SankeyDiagramChartConfiguration as SankeyDiagramChartConfiguration;
    impl crate::value::ToValue for SankeyDiagramChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sankeydiagramfieldwells.html
    pub struct SankeyDiagramFieldWells_ {
        pub sankey_diagram_aggregated_field_wells: Option<Box<SankeyDiagramAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SankeyDiagramFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SankeyDiagramFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SankeyDiagramFieldWells as SankeyDiagramFieldWells;
    impl crate::value::ToValue for SankeyDiagramFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sankey_diagram_aggregated_field_wells {
                properties.insert(
                    "SankeyDiagramAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sankeydiagramsortconfiguration.html
    pub struct SankeyDiagramSortConfiguration_ {
        pub destination_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub source_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub weight_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SankeyDiagramSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SankeyDiagramSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SankeyDiagramSortConfiguration as SankeyDiagramSortConfiguration;
    impl crate::value::ToValue for SankeyDiagramSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.destination_items_limit {
                properties.insert(
                    "DestinationItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_items_limit {
                properties.insert(
                    "SourceItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.weight_sort {
                properties.insert(
                    "WeightSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sankeydiagramvisual.html
    pub struct SankeyDiagramVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<SankeyDiagramChartConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SankeyDiagramVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SankeyDiagramVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SankeyDiagramVisual as SankeyDiagramVisual;
    impl crate::value::ToValue for SankeyDiagramVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scatterplotcategoricallyaggregatedfieldwells.html
    pub struct ScatterPlotCategoricallyAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub label: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
        pub x_axis: Option<Vec<MeasureField_>>,
        pub y_axis: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScatterPlotCategoricallyAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScatterPlotCategoricallyAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScatterPlotCategoricallyAggregatedFieldWells as ScatterPlotCategoricallyAggregatedFieldWells;
    impl crate::value::ToValue for ScatterPlotCategoricallyAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scatterplotconfiguration.html
    pub struct ScatterPlotConfiguration_ {
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<ScatterPlotFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub sort_configuration: Option<Box<ScatterPlotSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScatterPlotConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScatterPlotConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScatterPlotConfiguration as ScatterPlotConfiguration;
    impl crate::value::ToValue for ScatterPlotConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_display_options {
                properties.insert(
                    "YAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_label_options {
                properties.insert(
                    "YAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scatterplotfieldwells.html
    pub struct ScatterPlotFieldWells_ {
        pub scatter_plot_categorically_aggregated_field_wells:
            Option<Box<ScatterPlotCategoricallyAggregatedFieldWells_>>,
        pub scatter_plot_unaggregated_field_wells: Option<Box<ScatterPlotUnaggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScatterPlotFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScatterPlotFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScatterPlotFieldWells as ScatterPlotFieldWells;
    impl crate::value::ToValue for ScatterPlotFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scatter_plot_categorically_aggregated_field_wells {
                properties.insert(
                    "ScatterPlotCategoricallyAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scatter_plot_unaggregated_field_wells {
                properties.insert(
                    "ScatterPlotUnaggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scatterplotsortconfiguration.html
    pub struct ScatterPlotSortConfiguration_ {
        pub scatter_plot_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScatterPlotSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScatterPlotSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScatterPlotSortConfiguration as ScatterPlotSortConfiguration;
    impl crate::value::ToValue for ScatterPlotSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scatter_plot_limit_configuration {
                properties.insert(
                    "ScatterPlotLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scatterplotunaggregatedfieldwells.html
    pub struct ScatterPlotUnaggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub label: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
        pub x_axis: Option<Vec<DimensionField_>>,
        pub y_axis: Option<Vec<DimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScatterPlotUnaggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScatterPlotUnaggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScatterPlotUnaggregatedFieldWells as ScatterPlotUnaggregatedFieldWells;
    impl crate::value::ToValue for ScatterPlotUnaggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scatterplotvisual.html
    pub struct ScatterPlotVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<ScatterPlotConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScatterPlotVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScatterPlotVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScatterPlotVisual as ScatterPlotVisual;
    impl crate::value::ToValue for ScatterPlotVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-scrollbaroptions.html
    pub struct ScrollBarOptions_ {
        pub visibility: Option<crate::value::ExpString>,
        pub visible_range: Option<Box<VisibleRangeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ScrollBarOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ScrollBarOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ScrollBarOptions as ScrollBarOptions;
    impl crate::value::ToValue for ScrollBarOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visible_range {
                properties.insert(
                    "VisibleRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-secondaryvalueoptions.html
    pub struct SecondaryValueOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SecondaryValueOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SecondaryValueOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SecondaryValueOptions as SecondaryValueOptions;
    impl crate::value::ToValue for SecondaryValueOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionafterpagebreak.html
    pub struct SectionAfterPageBreak_ {
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionAfterPageBreak {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionAfterPageBreak"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionAfterPageBreak as SectionAfterPageBreak;
    impl crate::value::ToValue for SectionAfterPageBreak_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionbasedlayoutcanvassizeoptions.html
    pub struct SectionBasedLayoutCanvasSizeOptions_ {
        pub paper_canvas_size_options: Option<Box<SectionBasedLayoutPaperCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionBasedLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionBasedLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionBasedLayoutCanvasSizeOptions as SectionBasedLayoutCanvasSizeOptions;
    impl crate::value::ToValue for SectionBasedLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.paper_canvas_size_options {
                properties.insert(
                    "PaperCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionbasedlayoutconfiguration.html
    pub struct SectionBasedLayoutConfiguration_ {
        pub body_sections: Vec<BodySectionConfiguration_>,
        pub canvas_size_options: Box<SectionBasedLayoutCanvasSizeOptions_>,
        pub footer_sections: Vec<HeaderFooterSectionConfiguration_>,
        pub header_sections: Vec<HeaderFooterSectionConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionBasedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionBasedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionBasedLayoutConfiguration as SectionBasedLayoutConfiguration;
    impl crate::value::ToValue for SectionBasedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BodySections".to_string(),
                crate::value::ToValue::to_value(&self.body_sections),
            );
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.insert(
                "FooterSections".to_string(),
                crate::value::ToValue::to_value(&self.footer_sections),
            );
            properties.insert(
                "HeaderSections".to_string(),
                crate::value::ToValue::to_value(&self.header_sections),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionbasedlayoutpapercanvassizeoptions.html
    pub struct SectionBasedLayoutPaperCanvasSizeOptions_ {
        pub paper_margin: Option<Box<Spacing_>>,
        pub paper_orientation: Option<crate::value::ExpString>,
        pub paper_size: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionBasedLayoutPaperCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionBasedLayoutPaperCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionBasedLayoutPaperCanvasSizeOptions as SectionBasedLayoutPaperCanvasSizeOptions;
    impl crate::value::ToValue for SectionBasedLayoutPaperCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.paper_margin {
                properties.insert(
                    "PaperMargin".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paper_orientation {
                properties.insert(
                    "PaperOrientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paper_size {
                properties.insert(
                    "PaperSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionlayoutconfiguration.html
    pub struct SectionLayoutConfiguration_ {
        pub free_form_layout: Box<FreeFormSectionLayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionLayoutConfiguration as SectionLayoutConfiguration;
    impl crate::value::ToValue for SectionLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FreeFormLayout".to_string(),
                crate::value::ToValue::to_value(&self.free_form_layout),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionpagebreakconfiguration.html
    pub struct SectionPageBreakConfiguration_ {
        pub after: Option<Box<SectionAfterPageBreak_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionPageBreakConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionPageBreakConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionPageBreakConfiguration as SectionPageBreakConfiguration;
    impl crate::value::ToValue for SectionPageBreakConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.after {
                properties.insert("After".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sectionstyle.html
    pub struct SectionStyle_ {
        pub height: Option<crate::value::ExpString>,
        pub padding: Option<Box<Spacing_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SectionStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SectionStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SectionStyle as SectionStyle;
    impl crate::value::ToValue for SectionStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.padding {
                properties.insert(
                    "Padding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-selectedsheetsfilterscopeconfiguration.html
    pub struct SelectedSheetsFilterScopeConfiguration_ {
        pub sheet_visual_scoping_configurations: Option<Vec<SheetVisualScopingConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SelectedSheetsFilterScopeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SelectedSheetsFilterScopeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SelectedSheetsFilterScopeConfiguration as SelectedSheetsFilterScopeConfiguration;
    impl crate::value::ToValue for SelectedSheetsFilterScopeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sheet_visual_scoping_configurations {
                properties.insert(
                    "SheetVisualScopingConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-seriesitem.html
    pub struct SeriesItem_ {
        pub data_field_series_item: Option<Box<DataFieldSeriesItem_>>,
        pub field_series_item: Option<Box<FieldSeriesItem_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SeriesItem as SeriesItem;
    impl crate::value::ToValue for SeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_field_series_item {
                properties.insert(
                    "DataFieldSeriesItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_series_item {
                properties.insert(
                    "FieldSeriesItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-setparametervalueconfiguration.html
    pub struct SetParameterValueConfiguration_ {
        pub destination_parameter_name: crate::value::ExpString,
        pub value: Box<DestinationParameterValueConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SetParameterValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SetParameterValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SetParameterValueConfiguration as SetParameterValueConfiguration;
    impl crate::value::ToValue for SetParameterValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DestinationParameterName".to_string(),
                crate::value::ToValue::to_value(&self.destination_parameter_name),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-shapeconditionalformat.html
    pub struct ShapeConditionalFormat_ {
        pub background_color: Box<ConditionalFormattingColor_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ShapeConditionalFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ShapeConditionalFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ShapeConditionalFormat as ShapeConditionalFormat;
    impl crate::value::ToValue for ShapeConditionalFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BackgroundColor".to_string(),
                crate::value::ToValue::to_value(&self.background_color),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheet.html
    pub struct Sheet_ {
        pub name: Option<crate::value::ExpString>,
        pub sheet_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Sheet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Sheet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Sheet as Sheet;
    impl crate::value::ToValue for Sheet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sheet_id {
                properties.insert(
                    "SheetId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetcontrolinfoiconlabeloptions.html
    pub struct SheetControlInfoIconLabelOptions_ {
        pub info_icon_text: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetControlInfoIconLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetControlInfoIconLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetControlInfoIconLabelOptions as SheetControlInfoIconLabelOptions;
    impl crate::value::ToValue for SheetControlInfoIconLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_text {
                properties.insert(
                    "InfoIconText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetcontrollayout.html
    pub struct SheetControlLayout_ {
        pub configuration: Box<SheetControlLayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetControlLayout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetControlLayout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetControlLayout as SheetControlLayout;
    impl crate::value::ToValue for SheetControlLayout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetcontrollayoutconfiguration.html
    pub struct SheetControlLayoutConfiguration_ {
        pub grid_layout: Option<Box<GridLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetControlLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetControlLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetControlLayoutConfiguration as SheetControlLayoutConfiguration;
    impl crate::value::ToValue for SheetControlLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.grid_layout {
                properties.insert(
                    "GridLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetcontrolsoption.html
    pub struct SheetControlsOption_ {
        pub visibility_state: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetControlsOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetControlsOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetControlsOption as SheetControlsOption;
    impl crate::value::ToValue for SheetControlsOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility_state {
                properties.insert(
                    "VisibilityState".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetdefinition.html
    pub struct SheetDefinition_ {
        pub content_type: Option<crate::value::ExpString>,
        pub description: Option<crate::value::ExpString>,
        pub filter_controls: Option<Vec<FilterControl_>>,
        pub images: Option<Vec<SheetImage_>>,
        pub layouts: Option<Vec<Layout_>>,
        pub name: Option<crate::value::ExpString>,
        pub parameter_controls: Option<Vec<ParameterControl_>>,
        pub sheet_control_layouts: Option<Vec<SheetControlLayout_>>,
        pub sheet_id: crate::value::ExpString,
        pub text_boxes: Option<Vec<SheetTextBox_>>,
        pub title: Option<crate::value::ExpString>,
        pub visuals: Option<Vec<Visual_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetDefinition as SheetDefinition;
    impl crate::value::ToValue for SheetDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content_type {
                properties.insert(
                    "ContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_controls {
                properties.insert(
                    "FilterControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.images {
                properties.insert("Images".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.layouts {
                properties.insert(
                    "Layouts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.parameter_controls {
                properties.insert(
                    "ParameterControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_control_layouts {
                properties.insert(
                    "SheetControlLayouts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_id),
            );
            if let Some(ref value) = self.text_boxes {
                properties.insert(
                    "TextBoxes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visuals {
                properties.insert(
                    "Visuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetelementconfigurationoverrides.html
    pub struct SheetElementConfigurationOverrides_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetElementConfigurationOverrides {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetElementConfigurationOverrides"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetElementConfigurationOverrides as SheetElementConfigurationOverrides;
    impl crate::value::ToValue for SheetElementConfigurationOverrides_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetelementrenderingrule.html
    pub struct SheetElementRenderingRule_ {
        pub configuration_overrides: Box<SheetElementConfigurationOverrides_>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetElementRenderingRule {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetElementRenderingRule"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetElementRenderingRule as SheetElementRenderingRule;
    impl crate::value::ToValue for SheetElementRenderingRule_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ConfigurationOverrides".to_string(),
                crate::value::ToValue::to_value(&self.configuration_overrides),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetimage.html
    pub struct SheetImage_ {
        pub actions: Option<Vec<ImageCustomAction_>>,
        pub image_content_alt_text: Option<crate::value::ExpString>,
        pub interactions: Option<Box<ImageInteractionOptions_>>,
        pub scaling: Option<Box<SheetImageScalingConfiguration_>>,
        pub sheet_image_id: crate::value::ExpString,
        pub source: Box<SheetImageSource_>,
        pub tooltip: Option<Box<SheetImageTooltipConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetImage {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetImage"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetImage as SheetImage;
    impl crate::value::ToValue for SheetImage_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.image_content_alt_text {
                properties.insert(
                    "ImageContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scaling {
                properties.insert(
                    "Scaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetImageId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_image_id),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetimagescalingconfiguration.html
    pub struct SheetImageScalingConfiguration_ {
        pub scaling_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetImageScalingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetImageScalingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetImageScalingConfiguration as SheetImageScalingConfiguration;
    impl crate::value::ToValue for SheetImageScalingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scaling_type {
                properties.insert(
                    "ScalingType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetimagesource.html
    pub struct SheetImageSource_ {
        pub sheet_image_static_file_source: Option<Box<SheetImageStaticFileSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetImageSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetImageSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetImageSource as SheetImageSource;
    impl crate::value::ToValue for SheetImageSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sheet_image_static_file_source {
                properties.insert(
                    "SheetImageStaticFileSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetimagestaticfilesource.html
    pub struct SheetImageStaticFileSource_ {
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetImageStaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetImageStaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetImageStaticFileSource as SheetImageStaticFileSource;
    impl crate::value::ToValue for SheetImageStaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetimagetooltipconfiguration.html
    pub struct SheetImageTooltipConfiguration_ {
        pub tooltip_text: Option<Box<SheetImageTooltipText_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetImageTooltipConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetImageTooltipConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetImageTooltipConfiguration as SheetImageTooltipConfiguration;
    impl crate::value::ToValue for SheetImageTooltipConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tooltip_text {
                properties.insert(
                    "TooltipText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetimagetooltiptext.html
    pub struct SheetImageTooltipText_ {
        pub plain_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetImageTooltipText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetImageTooltipText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetImageTooltipText as SheetImageTooltipText;
    impl crate::value::ToValue for SheetImageTooltipText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetlayoutelementmaximizationoption.html
    pub struct SheetLayoutElementMaximizationOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetLayoutElementMaximizationOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetLayoutElementMaximizationOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetLayoutElementMaximizationOption as SheetLayoutElementMaximizationOption;
    impl crate::value::ToValue for SheetLayoutElementMaximizationOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheettextbox.html
    pub struct SheetTextBox_ {
        pub content: Option<crate::value::ExpString>,
        pub sheet_text_box_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetTextBox {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetTextBox"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetTextBox as SheetTextBox;
    impl crate::value::ToValue for SheetTextBox_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content {
                properties.insert(
                    "Content".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetTextBoxId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_text_box_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetvisualscopingconfiguration.html
    pub struct SheetVisualScopingConfiguration_ {
        pub scope: crate::value::ExpString,
        pub sheet_id: crate::value::ExpString,
        pub visual_ids: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SheetVisualScopingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SheetVisualScopingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SheetVisualScopingConfiguration as SheetVisualScopingConfiguration;
    impl crate::value::ToValue for SheetVisualScopingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Scope".to_string(),
                crate::value::ToValue::to_value(&self.scope),
            );
            properties.insert(
                "SheetId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_id),
            );
            if let Some(ref value) = self.visual_ids {
                properties.insert(
                    "VisualIds".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-shortformattext.html
    pub struct ShortFormatText_ {
        pub plain_text: Option<crate::value::ExpString>,
        pub rich_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ShortFormatText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ShortFormatText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ShortFormatText as ShortFormatText;
    impl crate::value::ToValue for ShortFormatText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rich_text {
                properties.insert(
                    "RichText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-simpleclustermarker.html
    pub struct SimpleClusterMarker_ {
        pub color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SimpleClusterMarker {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SimpleClusterMarker"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SimpleClusterMarker as SimpleClusterMarker;
    impl crate::value::ToValue for SimpleClusterMarker_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-singleaxisoptions.html
    pub struct SingleAxisOptions_ {
        pub y_axis_options: Option<Box<YAxisOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SingleAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SingleAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SingleAxisOptions as SingleAxisOptions;
    impl crate::value::ToValue for SingleAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.y_axis_options {
                properties.insert(
                    "YAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-slidercontroldisplayoptions.html
    pub struct SliderControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SliderControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SliderControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SliderControlDisplayOptions as SliderControlDisplayOptions;
    impl crate::value::ToValue for SliderControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-smallmultiplesaxisproperties.html
    pub struct SmallMultiplesAxisProperties_ {
        pub placement: Option<crate::value::ExpString>,
        pub scale: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SmallMultiplesAxisProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SmallMultiplesAxisProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SmallMultiplesAxisProperties as SmallMultiplesAxisProperties;
    impl crate::value::ToValue for SmallMultiplesAxisProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scale {
                properties.insert("Scale".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-smallmultiplesoptions.html
    pub struct SmallMultiplesOptions_ {
        pub max_visible_columns: Option<f64>,
        pub max_visible_rows: Option<f64>,
        pub panel_configuration: Option<Box<PanelConfiguration_>>,
        pub x_axis: Option<Box<SmallMultiplesAxisProperties_>>,
        pub y_axis: Option<Box<SmallMultiplesAxisProperties_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SmallMultiplesOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SmallMultiplesOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SmallMultiplesOptions as SmallMultiplesOptions;
    impl crate::value::ToValue for SmallMultiplesOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.max_visible_columns {
                properties.insert(
                    "MaxVisibleColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.max_visible_rows {
                properties.insert(
                    "MaxVisibleRows".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.panel_configuration {
                properties.insert(
                    "PanelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-spacing.html
    pub struct Spacing_ {
        pub bottom: Option<crate::value::ExpString>,
        pub left: Option<crate::value::ExpString>,
        pub right: Option<crate::value::ExpString>,
        pub top: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Spacing {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Spacing"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Spacing as Spacing;
    impl crate::value::ToValue for Spacing_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bottom {
                properties.insert("Bottom".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.left {
                properties.insert("Left".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.right {
                properties.insert("Right".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.top {
                properties.insert("Top".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-spatialstaticfile.html
    pub struct SpatialStaticFile_ {
        pub source: Option<Box<StaticFileSource_>>,
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SpatialStaticFile {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SpatialStaticFile"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SpatialStaticFile as SpatialStaticFile;
    impl crate::value::ToValue for SpatialStaticFile_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-staticfile.html
    pub struct StaticFile_ {
        pub image_static_file: Option<Box<ImageStaticFile_>>,
        pub spatial_static_file: Option<Box<SpatialStaticFile_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StaticFile {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StaticFile"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StaticFile as StaticFile;
    impl crate::value::ToValue for StaticFile_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_static_file {
                properties.insert(
                    "ImageStaticFile".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.spatial_static_file {
                properties.insert(
                    "SpatialStaticFile".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-staticfiles3sourceoptions.html
    pub struct StaticFileS3SourceOptions_ {
        pub bucket_name: crate::value::ExpString,
        pub object_key: crate::value::ExpString,
        pub region: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StaticFileS3SourceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StaticFileS3SourceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StaticFileS3SourceOptions as StaticFileS3SourceOptions;
    impl crate::value::ToValue for StaticFileS3SourceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BucketName".to_string(),
                crate::value::ToValue::to_value(&self.bucket_name),
            );
            properties.insert(
                "ObjectKey".to_string(),
                crate::value::ToValue::to_value(&self.object_key),
            );
            properties.insert(
                "Region".to_string(),
                crate::value::ToValue::to_value(&self.region),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-staticfilesource.html
    pub struct StaticFileSource_ {
        pub s3_options: Option<Box<StaticFileS3SourceOptions_>>,
        pub url_options: Option<Box<StaticFileUrlSourceOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StaticFileSource as StaticFileSource;
    impl crate::value::ToValue for StaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.s3_options {
                properties.insert(
                    "S3Options".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_options {
                properties.insert(
                    "UrlOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-staticfileurlsourceoptions.html
    pub struct StaticFileUrlSourceOptions_ {
        pub url: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StaticFileUrlSourceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StaticFileUrlSourceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StaticFileUrlSourceOptions as StaticFileUrlSourceOptions;
    impl crate::value::ToValue for StaticFileUrlSourceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Url".to_string(),
                crate::value::ToValue::to_value(&self.url),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-stringdefaultvalues.html
    pub struct StringDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StringDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StringDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StringDefaultValues as StringDefaultValues;
    impl crate::value::ToValue for StringDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-stringformatconfiguration.html
    pub struct StringFormatConfiguration_ {
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub numeric_format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StringFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StringFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StringFormatConfiguration as StringFormatConfiguration;
    impl crate::value::ToValue for StringFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_format_configuration {
                properties.insert(
                    "NumericFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-stringparameter.html
    pub struct StringParameter_ {
        pub name: crate::value::ExpString,
        pub values: Vec<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StringParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StringParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StringParameter as StringParameter;
    impl crate::value::ToValue for StringParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "Values".to_string(),
                crate::value::ToValue::to_value(&self.values),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-stringparameterdeclaration.html
    pub struct StringParameterDeclaration_ {
        pub default_values: Option<Box<StringDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<StringValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StringParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StringParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StringParameterDeclaration as StringParameterDeclaration;
    impl crate::value::ToValue for StringParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-stringvaluewhenunsetconfiguration.html
    pub struct StringValueWhenUnsetConfiguration_ {
        pub custom_value: Option<crate::value::ExpString>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_StringValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.StringValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_StringValueWhenUnsetConfiguration as StringValueWhenUnsetConfiguration;
    impl crate::value::ToValue for StringValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-subtotaloptions.html
    pub struct SubtotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_level: Option<crate::value::ExpString>,
        pub field_level_options: Option<Vec<PivotTableFieldSubtotalOptions_>>,
        pub metric_header_cell_style: Option<Box<TableCellStyle_>>,
        pub style_targets: Option<Vec<TableStyleTarget_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<crate::value::ExpString>,
        pub value_cell_style: Option<Box<TableCellStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_SubtotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.SubtotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_SubtotalOptions as SubtotalOptions;
    impl crate::value::ToValue for SubtotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_level {
                properties.insert(
                    "FieldLevel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_level_options {
                properties.insert(
                    "FieldLevelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_header_cell_style {
                properties.insert(
                    "MetricHeaderCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.style_targets {
                properties.insert(
                    "StyleTargets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_cell_style {
                properties.insert(
                    "ValueCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableaggregatedfieldwells.html
    pub struct TableAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableAggregatedFieldWells as TableAggregatedFieldWells;
    impl crate::value::ToValue for TableAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableborderoptions.html
    pub struct TableBorderOptions_ {
        pub color: Option<crate::value::ExpString>,
        pub style: Option<crate::value::ExpString>,
        pub thickness: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableBorderOptions as TableBorderOptions;
    impl crate::value::ToValue for TableBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.thickness {
                properties.insert(
                    "Thickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablecellconditionalformatting.html
    pub struct TableCellConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub text_format: Option<Box<TextConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableCellConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableCellConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableCellConditionalFormatting as TableCellConditionalFormatting;
    impl crate::value::ToValue for TableCellConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.text_format {
                properties.insert(
                    "TextFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablecellimagesizingconfiguration.html
    pub struct TableCellImageSizingConfiguration_ {
        pub table_cell_image_scaling_configuration: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableCellImageSizingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableCellImageSizingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableCellImageSizingConfiguration as TableCellImageSizingConfiguration;
    impl crate::value::ToValue for TableCellImageSizingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_cell_image_scaling_configuration {
                properties.insert(
                    "TableCellImageScalingConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablecellstyle.html
    pub struct TableCellStyle_ {
        pub background_color: Option<crate::value::ExpString>,
        pub border: Option<Box<GlobalTableBorderOptions_>>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub height: Option<f64>,
        pub horizontal_text_alignment: Option<crate::value::ExpString>,
        pub text_wrap: Option<crate::value::ExpString>,
        pub vertical_text_alignment: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableCellStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableCellStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableCellStyle as TableCellStyle;
    impl crate::value::ToValue for TableCellStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border {
                properties.insert("Border".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.horizontal_text_alignment {
                properties.insert(
                    "HorizontalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_wrap {
                properties.insert(
                    "TextWrap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_text_alignment {
                properties.insert(
                    "VerticalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableconditionalformatting.html
    pub struct TableConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<TableConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableConditionalFormatting as TableConditionalFormatting;
    impl crate::value::ToValue for TableConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableconditionalformattingoption.html
    pub struct TableConditionalFormattingOption_ {
        pub cell: Option<Box<TableCellConditionalFormatting_>>,
        pub row: Option<Box<TableRowConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableConditionalFormattingOption as TableConditionalFormattingOption;
    impl crate::value::ToValue for TableConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell {
                properties.insert("Cell".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.row {
                properties.insert("Row".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableconfiguration.html
    pub struct TableConfiguration_ {
        pub field_options: Option<Box<TableFieldOptions_>>,
        pub field_wells: Option<Box<TableFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub paginated_report_options: Option<Box<TablePaginatedReportOptions_>>,
        pub sort_configuration: Option<Box<TableSortConfiguration_>>,
        pub table_inline_visualizations: Option<Vec<TableInlineVisualization_>>,
        pub table_options: Option<Box<TableOptions_>>,
        pub total_options: Option<Box<TotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableConfiguration as TableConfiguration;
    impl crate::value::ToValue for TableConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_options {
                properties.insert(
                    "FieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_report_options {
                properties.insert(
                    "PaginatedReportOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_inline_visualizations {
                properties.insert(
                    "TableInlineVisualizations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_options {
                properties.insert(
                    "TableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_options {
                properties.insert(
                    "TotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldcustomiconcontent.html
    pub struct TableFieldCustomIconContent_ {
        pub icon: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldCustomIconContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldCustomIconContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldCustomIconContent as TableFieldCustomIconContent;
    impl crate::value::ToValue for TableFieldCustomIconContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldcustomtextcontent.html
    pub struct TableFieldCustomTextContent_ {
        pub font_configuration: Box<FontConfiguration_>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldCustomTextContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldCustomTextContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldCustomTextContent as TableFieldCustomTextContent;
    impl crate::value::ToValue for TableFieldCustomTextContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FontConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.font_configuration),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldimageconfiguration.html
    pub struct TableFieldImageConfiguration_ {
        pub sizing_options: Option<Box<TableCellImageSizingConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldImageConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldImageConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldImageConfiguration as TableFieldImageConfiguration;
    impl crate::value::ToValue for TableFieldImageConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sizing_options {
                properties.insert(
                    "SizingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldlinkconfiguration.html
    pub struct TableFieldLinkConfiguration_ {
        pub content: Box<TableFieldLinkContentConfiguration_>,
        pub target: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldLinkConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldLinkConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldLinkConfiguration as TableFieldLinkConfiguration;
    impl crate::value::ToValue for TableFieldLinkConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Content".to_string(),
                crate::value::ToValue::to_value(&self.content),
            );
            properties.insert(
                "Target".to_string(),
                crate::value::ToValue::to_value(&self.target),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldlinkcontentconfiguration.html
    pub struct TableFieldLinkContentConfiguration_ {
        pub custom_icon_content: Option<Box<TableFieldCustomIconContent_>>,
        pub custom_text_content: Option<Box<TableFieldCustomTextContent_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldLinkContentConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldLinkContentConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldLinkContentConfiguration as TableFieldLinkContentConfiguration;
    impl crate::value::ToValue for TableFieldLinkContentConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_icon_content {
                properties.insert(
                    "CustomIconContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_text_content {
                properties.insert(
                    "CustomTextContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldoption.html
    pub struct TableFieldOption_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub url_styling: Option<Box<TableFieldURLConfiguration_>>,
        pub visibility: Option<crate::value::ExpString>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldOption as TableFieldOption;
    impl crate::value::ToValue for TableFieldOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.url_styling {
                properties.insert(
                    "URLStyling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldoptions.html
    pub struct TableFieldOptions_ {
        pub order: Option<Vec<crate::value::ExpString>>,
        pub pinned_field_options: Option<Box<TablePinnedFieldOptions_>>,
        pub selected_field_options: Option<Vec<TableFieldOption_>>,
        pub transposed_table_options: Option<Vec<TransposedTableOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldOptions as TableFieldOptions;
    impl crate::value::ToValue for TableFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.order {
                properties.insert("Order".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.pinned_field_options {
                properties.insert(
                    "PinnedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.transposed_table_options {
                properties.insert(
                    "TransposedTableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldurlconfiguration.html
    pub struct TableFieldURLConfiguration_ {
        pub image_configuration: Option<Box<TableFieldImageConfiguration_>>,
        pub link_configuration: Option<Box<TableFieldLinkConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldURLConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldURLConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldURLConfiguration as TableFieldURLConfiguration;
    impl crate::value::ToValue for TableFieldURLConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_configuration {
                properties.insert(
                    "ImageConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.link_configuration {
                properties.insert(
                    "LinkConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablefieldwells.html
    pub struct TableFieldWells_ {
        pub table_aggregated_field_wells: Option<Box<TableAggregatedFieldWells_>>,
        pub table_unaggregated_field_wells: Option<Box<TableUnaggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableFieldWells as TableFieldWells;
    impl crate::value::ToValue for TableFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_aggregated_field_wells {
                properties.insert(
                    "TableAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_unaggregated_field_wells {
                properties.insert(
                    "TableUnaggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableinlinevisualization.html
    pub struct TableInlineVisualization_ {
        pub data_bars: Option<Box<DataBarsOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableInlineVisualization {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableInlineVisualization"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableInlineVisualization as TableInlineVisualization;
    impl crate::value::ToValue for TableInlineVisualization_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_bars {
                properties.insert(
                    "DataBars".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableoptions.html
    pub struct TableOptions_ {
        pub cell_style: Option<Box<TableCellStyle_>>,
        pub header_style: Option<Box<TableCellStyle_>>,
        pub orientation: Option<crate::value::ExpString>,
        pub row_alternate_color_options: Option<Box<RowAlternateColorOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableOptions as TableOptions;
    impl crate::value::ToValue for TableOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_style {
                properties.insert(
                    "CellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.header_style {
                properties.insert(
                    "HeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.orientation {
                properties.insert(
                    "Orientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_alternate_color_options {
                properties.insert(
                    "RowAlternateColorOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablepaginatedreportoptions.html
    pub struct TablePaginatedReportOptions_ {
        pub overflow_column_header_visibility: Option<crate::value::ExpString>,
        pub vertical_overflow_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TablePaginatedReportOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TablePaginatedReportOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TablePaginatedReportOptions as TablePaginatedReportOptions;
    impl crate::value::ToValue for TablePaginatedReportOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.overflow_column_header_visibility {
                properties.insert(
                    "OverflowColumnHeaderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_overflow_visibility {
                properties.insert(
                    "VerticalOverflowVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablepinnedfieldoptions.html
    pub struct TablePinnedFieldOptions_ {
        pub pinned_left_fields: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TablePinnedFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TablePinnedFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TablePinnedFieldOptions as TablePinnedFieldOptions;
    impl crate::value::ToValue for TablePinnedFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pinned_left_fields {
                properties.insert(
                    "PinnedLeftFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablerowconditionalformatting.html
    pub struct TableRowConditionalFormatting_ {
        pub background_color: Option<Box<ConditionalFormattingColor_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableRowConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableRowConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableRowConditionalFormatting as TableRowConditionalFormatting;
    impl crate::value::ToValue for TableRowConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablesideborderoptions.html
    pub struct TableSideBorderOptions_ {
        pub bottom: Option<Box<TableBorderOptions_>>,
        pub inner_horizontal: Option<Box<TableBorderOptions_>>,
        pub inner_vertical: Option<Box<TableBorderOptions_>>,
        pub left: Option<Box<TableBorderOptions_>>,
        pub right: Option<Box<TableBorderOptions_>>,
        pub top: Option<Box<TableBorderOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableSideBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableSideBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableSideBorderOptions as TableSideBorderOptions;
    impl crate::value::ToValue for TableSideBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bottom {
                properties.insert("Bottom".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.inner_horizontal {
                properties.insert(
                    "InnerHorizontal".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.inner_vertical {
                properties.insert(
                    "InnerVertical".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.left {
                properties.insert("Left".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.right {
                properties.insert("Right".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.top {
                properties.insert("Top".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablesortconfiguration.html
    pub struct TableSortConfiguration_ {
        pub pagination_configuration: Option<Box<PaginationConfiguration_>>,
        pub row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableSortConfiguration as TableSortConfiguration;
    impl crate::value::ToValue for TableSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pagination_configuration {
                properties.insert(
                    "PaginationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_sort {
                properties.insert(
                    "RowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablestyletarget.html
    pub struct TableStyleTarget_ {
        pub cell_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableStyleTarget {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableStyleTarget"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableStyleTarget as TableStyleTarget;
    impl crate::value::ToValue for TableStyleTarget_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CellType".to_string(),
                crate::value::ToValue::to_value(&self.cell_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tableunaggregatedfieldwells.html
    pub struct TableUnaggregatedFieldWells_ {
        pub values: Option<Vec<UnaggregatedField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableUnaggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableUnaggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableUnaggregatedFieldWells as TableUnaggregatedFieldWells;
    impl crate::value::ToValue for TableUnaggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tablevisual.html
    pub struct TableVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<TableConfiguration_>>,
        pub conditional_formatting: Option<Box<TableConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TableVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TableVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TableVisual as TableVisual;
    impl crate::value::ToValue for TableVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-textareacontroldisplayoptions.html
    pub struct TextAreaControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub placeholder_options: Option<Box<TextControlPlaceholderOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TextAreaControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TextAreaControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TextAreaControlDisplayOptions as TextAreaControlDisplayOptions;
    impl crate::value::ToValue for TextAreaControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder_options {
                properties.insert(
                    "PlaceholderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-textconditionalformat.html
    pub struct TextConditionalFormat_ {
        pub background_color: Option<Box<ConditionalFormattingColor_>>,
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TextConditionalFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TextConditionalFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TextConditionalFormat as TextConditionalFormat;
    impl crate::value::ToValue for TextConditionalFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-textcontrolplaceholderoptions.html
    pub struct TextControlPlaceholderOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TextControlPlaceholderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TextControlPlaceholderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TextControlPlaceholderOptions as TextControlPlaceholderOptions;
    impl crate::value::ToValue for TextControlPlaceholderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-textfieldcontroldisplayoptions.html
    pub struct TextFieldControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub placeholder_options: Option<Box<TextControlPlaceholderOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TextFieldControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TextFieldControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TextFieldControlDisplayOptions as TextFieldControlDisplayOptions;
    impl crate::value::ToValue for TextFieldControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder_options {
                properties.insert(
                    "PlaceholderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-thousandseparatoroptions.html
    pub struct ThousandSeparatorOptions_ {
        pub grouping_style: Option<crate::value::ExpString>,
        pub symbol: Option<crate::value::ExpString>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ThousandSeparatorOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ThousandSeparatorOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ThousandSeparatorOptions as ThousandSeparatorOptions;
    impl crate::value::ToValue for ThousandSeparatorOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.grouping_style {
                properties.insert(
                    "GroupingStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.symbol {
                properties.insert("Symbol".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-timebasedforecastproperties.html
    pub struct TimeBasedForecastProperties_ {
        pub lower_boundary: Option<f64>,
        pub periods_backward: Option<f64>,
        pub periods_forward: Option<f64>,
        pub prediction_interval: Option<f64>,
        pub seasonality: Option<f64>,
        pub upper_boundary: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TimeBasedForecastProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TimeBasedForecastProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TimeBasedForecastProperties as TimeBasedForecastProperties;
    impl crate::value::ToValue for TimeBasedForecastProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.lower_boundary {
                properties.insert(
                    "LowerBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_backward {
                properties.insert(
                    "PeriodsBackward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_forward {
                properties.insert(
                    "PeriodsForward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prediction_interval {
                properties.insert(
                    "PredictionInterval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.seasonality {
                properties.insert(
                    "Seasonality".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.upper_boundary {
                properties.insert(
                    "UpperBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-timeequalityfilter.html
    pub struct TimeEqualityFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TimeEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TimeEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TimeEqualityFilter as TimeEqualityFilter;
    impl crate::value::ToValue for TimeEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-timerangedrilldownfilter.html
    pub struct TimeRangeDrillDownFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub range_maximum: crate::value::ExpString,
        pub range_minimum: crate::value::ExpString,
        pub time_granularity: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TimeRangeDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TimeRangeDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TimeRangeDrillDownFilter as TimeRangeDrillDownFilter;
    impl crate::value::ToValue for TimeRangeDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "RangeMaximum".to_string(),
                crate::value::ToValue::to_value(&self.range_maximum),
            );
            properties.insert(
                "RangeMinimum".to_string(),
                crate::value::ToValue::to_value(&self.range_minimum),
            );
            properties.insert(
                "TimeGranularity".to_string(),
                crate::value::ToValue::to_value(&self.time_granularity),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-timerangefilter.html
    pub struct TimeRangeFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub exclude_period_configuration: Option<Box<ExcludePeriodConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub null_option: crate::value::ExpString,
        pub range_maximum_value: Option<Box<TimeRangeFilterValue_>>,
        pub range_minimum_value: Option<Box<TimeRangeFilterValue_>>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TimeRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TimeRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TimeRangeFilter as TimeRangeFilter;
    impl crate::value::ToValue for TimeRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.exclude_period_configuration {
                properties.insert(
                    "ExcludePeriodConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.range_maximum_value {
                properties.insert(
                    "RangeMaximumValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum_value {
                properties.insert(
                    "RangeMinimumValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-timerangefiltervalue.html
    pub struct TimeRangeFilterValue_ {
        pub parameter: Option<crate::value::ExpString>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub static_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TimeRangeFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TimeRangeFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TimeRangeFilterValue as TimeRangeFilterValue;
    impl crate::value::ToValue for TimeRangeFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.parameter {
                properties.insert(
                    "Parameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tooltipitem.html
    pub struct TooltipItem_ {
        pub column_tooltip_item: Option<Box<ColumnTooltipItem_>>,
        pub field_tooltip_item: Option<Box<FieldTooltipItem_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TooltipItem as TooltipItem;
    impl crate::value::ToValue for TooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_tooltip_item {
                properties.insert(
                    "ColumnTooltipItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_tooltip_item {
                properties.insert(
                    "FieldTooltipItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-tooltipoptions.html
    pub struct TooltipOptions_ {
        pub field_based_tooltip: Option<Box<FieldBasedTooltip_>>,
        pub selected_tooltip_type: Option<crate::value::ExpString>,
        pub tooltip_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TooltipOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TooltipOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TooltipOptions as TooltipOptions;
    impl crate::value::ToValue for TooltipOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_based_tooltip {
                properties.insert(
                    "FieldBasedTooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_tooltip_type {
                properties.insert(
                    "SelectedTooltipType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_visibility {
                properties.insert(
                    "TooltipVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-topbottomfilter.html
    pub struct TopBottomFilter_ {
        pub aggregation_sort_configurations: Vec<AggregationSortConfiguration_>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub limit: Option<f64>,
        pub parameter_name: Option<crate::value::ExpString>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TopBottomFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TopBottomFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TopBottomFilter as TopBottomFilter;
    impl crate::value::ToValue for TopBottomFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AggregationSortConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.aggregation_sort_configurations),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-topbottommoverscomputation.html
    pub struct TopBottomMoversComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub mover_size: Option<f64>,
        pub name: Option<crate::value::ExpString>,
        pub sort_order: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TopBottomMoversComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TopBottomMoversComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TopBottomMoversComputation as TopBottomMoversComputation;
    impl crate::value::ToValue for TopBottomMoversComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.mover_size {
                properties.insert(
                    "MoverSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_order {
                properties.insert(
                    "SortOrder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-topbottomrankedcomputation.html
    pub struct TopBottomRankedComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub result_size: Option<f64>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TopBottomRankedComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TopBottomRankedComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TopBottomRankedComputation as TopBottomRankedComputation;
    impl crate::value::ToValue for TopBottomRankedComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.result_size {
                properties.insert(
                    "ResultSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-totalaggregationcomputation.html
    pub struct TotalAggregationComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TotalAggregationComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TotalAggregationComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TotalAggregationComputation as TotalAggregationComputation;
    impl crate::value::ToValue for TotalAggregationComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-totalaggregationfunction.html
    pub struct TotalAggregationFunction_ {
        pub simple_total_aggregation_function: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TotalAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TotalAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TotalAggregationFunction as TotalAggregationFunction;
    impl crate::value::ToValue for TotalAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_total_aggregation_function {
                properties.insert(
                    "SimpleTotalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-totalaggregationoption.html
    pub struct TotalAggregationOption_ {
        pub field_id: crate::value::ExpString,
        pub total_aggregation_function: Box<TotalAggregationFunction_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TotalAggregationOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TotalAggregationOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TotalAggregationOption as TotalAggregationOption;
    impl crate::value::ToValue for TotalAggregationOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.insert(
                "TotalAggregationFunction".to_string(),
                crate::value::ToValue::to_value(&self.total_aggregation_function),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-totaloptions.html
    pub struct TotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub placement: Option<crate::value::ExpString>,
        pub scroll_status: Option<crate::value::ExpString>,
        pub total_aggregation_options: Option<Vec<TotalAggregationOption_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TotalOptions as TotalOptions;
    impl crate::value::ToValue for TotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scroll_status {
                properties.insert(
                    "ScrollStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation_options {
                properties.insert(
                    "TotalAggregationOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-transposedtableoption.html
    pub struct TransposedTableOption_ {
        pub column_index: Option<f64>,
        pub column_type: crate::value::ExpString,
        pub column_width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TransposedTableOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TransposedTableOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TransposedTableOption as TransposedTableOption;
    impl crate::value::ToValue for TransposedTableOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_index {
                properties.insert(
                    "ColumnIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnType".to_string(),
                crate::value::ToValue::to_value(&self.column_type),
            );
            if let Some(ref value) = self.column_width {
                properties.insert(
                    "ColumnWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-treemapaggregatedfieldwells.html
    pub struct TreeMapAggregatedFieldWells_ {
        pub colors: Option<Vec<MeasureField_>>,
        pub groups: Option<Vec<DimensionField_>>,
        pub sizes: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TreeMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TreeMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TreeMapAggregatedFieldWells as TreeMapAggregatedFieldWells;
    impl crate::value::ToValue for TreeMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.groups {
                properties.insert("Groups".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sizes {
                properties.insert("Sizes".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-treemapconfiguration.html
    pub struct TreeMapConfiguration_ {
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_scale: Option<Box<ColorScale_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<TreeMapFieldWells_>>,
        pub group_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub size_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<TreeMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TreeMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TreeMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TreeMapConfiguration as TreeMapConfiguration;
    impl crate::value::ToValue for TreeMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_scale {
                properties.insert(
                    "ColorScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.group_label_options {
                properties.insert(
                    "GroupLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size_label_options {
                properties.insert(
                    "SizeLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-treemapfieldwells.html
    pub struct TreeMapFieldWells_ {
        pub tree_map_aggregated_field_wells: Option<Box<TreeMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TreeMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TreeMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TreeMapFieldWells as TreeMapFieldWells;
    impl crate::value::ToValue for TreeMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tree_map_aggregated_field_wells {
                properties.insert(
                    "TreeMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-treemapsortconfiguration.html
    pub struct TreeMapSortConfiguration_ {
        pub tree_map_group_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub tree_map_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TreeMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TreeMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TreeMapSortConfiguration as TreeMapSortConfiguration;
    impl crate::value::ToValue for TreeMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tree_map_group_items_limit_configuration {
                properties.insert(
                    "TreeMapGroupItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tree_map_sort {
                properties.insert(
                    "TreeMapSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-treemapvisual.html
    pub struct TreeMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<TreeMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TreeMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TreeMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TreeMapVisual as TreeMapVisual;
    impl crate::value::ToValue for TreeMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-trendarrowoptions.html
    pub struct TrendArrowOptions_ {
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_TrendArrowOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.TrendArrowOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_TrendArrowOptions as TrendArrowOptions;
    impl crate::value::ToValue for TrendArrowOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-unaggregatedfield.html
    pub struct UnaggregatedField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<FormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_UnaggregatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.UnaggregatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_UnaggregatedField as UnaggregatedField;
    impl crate::value::ToValue for UnaggregatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-uniquevaluescomputation.html
    pub struct UniqueValuesComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_UniqueValuesComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.UniqueValuesComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_UniqueValuesComputation as UniqueValuesComputation;
    impl crate::value::ToValue for UniqueValuesComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-validationstrategy.html
    pub struct ValidationStrategy_ {
        pub mode: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_ValidationStrategy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.ValidationStrategy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_ValidationStrategy as ValidationStrategy;
    impl crate::value::ToValue for ValidationStrategy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Mode".to_string(),
                crate::value::ToValue::to_value(&self.mode),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visiblerangeoptions.html
    pub struct VisibleRangeOptions_ {
        pub percent_range: Option<Box<PercentVisibleRange_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisibleRangeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisibleRangeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisibleRangeOptions as VisibleRangeOptions;
    impl crate::value::ToValue for VisibleRangeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percent_range {
                properties.insert(
                    "PercentRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visual.html
    pub struct Visual_ {
        pub bar_chart_visual: Option<Box<BarChartVisual_>>,
        pub box_plot_visual: Option<Box<BoxPlotVisual_>>,
        pub combo_chart_visual: Option<Box<ComboChartVisual_>>,
        pub custom_content_visual: Option<Box<CustomContentVisual_>>,
        pub empty_visual: Option<Box<EmptyVisual_>>,
        pub filled_map_visual: Option<Box<FilledMapVisual_>>,
        pub funnel_chart_visual: Option<Box<FunnelChartVisual_>>,
        pub gauge_chart_visual: Option<Box<GaugeChartVisual_>>,
        pub geospatial_map_visual: Option<Box<GeospatialMapVisual_>>,
        pub heat_map_visual: Option<Box<HeatMapVisual_>>,
        pub histogram_visual: Option<Box<HistogramVisual_>>,
        pub insight_visual: Option<Box<InsightVisual_>>,
        pub kpi_visual: Option<Box<KPIVisual_>>,
        pub layer_map_visual: Option<Box<LayerMapVisual_>>,
        pub line_chart_visual: Option<Box<LineChartVisual_>>,
        pub pie_chart_visual: Option<Box<PieChartVisual_>>,
        pub pivot_table_visual: Option<Box<PivotTableVisual_>>,
        pub plugin_visual: Option<Box<PluginVisual_>>,
        pub radar_chart_visual: Option<Box<RadarChartVisual_>>,
        pub sankey_diagram_visual: Option<Box<SankeyDiagramVisual_>>,
        pub scatter_plot_visual: Option<Box<ScatterPlotVisual_>>,
        pub table_visual: Option<Box<TableVisual_>>,
        pub tree_map_visual: Option<Box<TreeMapVisual_>>,
        pub waterfall_visual: Option<Box<WaterfallVisual_>>,
        pub word_cloud_visual: Option<Box<WordCloudVisual_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_Visual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.Visual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_Visual as Visual;
    impl crate::value::ToValue for Visual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_chart_visual {
                properties.insert(
                    "BarChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.box_plot_visual {
                properties.insert(
                    "BoxPlotVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.combo_chart_visual {
                properties.insert(
                    "ComboChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_content_visual {
                properties.insert(
                    "CustomContentVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.empty_visual {
                properties.insert(
                    "EmptyVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filled_map_visual {
                properties.insert(
                    "FilledMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.funnel_chart_visual {
                properties.insert(
                    "FunnelChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gauge_chart_visual {
                properties.insert(
                    "GaugeChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.geospatial_map_visual {
                properties.insert(
                    "GeospatialMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_visual {
                properties.insert(
                    "HeatMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.histogram_visual {
                properties.insert(
                    "HistogramVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.insight_visual {
                properties.insert(
                    "InsightVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.kpi_visual {
                properties.insert(
                    "KPIVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.layer_map_visual {
                properties.insert(
                    "LayerMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_chart_visual {
                properties.insert(
                    "LineChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pie_chart_visual {
                properties.insert(
                    "PieChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pivot_table_visual {
                properties.insert(
                    "PivotTableVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.plugin_visual {
                properties.insert(
                    "PluginVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.radar_chart_visual {
                properties.insert(
                    "RadarChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sankey_diagram_visual {
                properties.insert(
                    "SankeyDiagramVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scatter_plot_visual {
                properties.insert(
                    "ScatterPlotVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_visual {
                properties.insert(
                    "TableVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tree_map_visual {
                properties.insert(
                    "TreeMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.waterfall_visual {
                properties.insert(
                    "WaterfallVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_cloud_visual {
                properties.insert(
                    "WordCloudVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualaxissortoption.html
    pub struct VisualAxisSortOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualAxisSortOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualAxisSortOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualAxisSortOption as VisualAxisSortOption;
    impl crate::value::ToValue for VisualAxisSortOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualcustomaction.html
    pub struct VisualCustomAction_ {
        pub action_operations: Vec<VisualCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualCustomAction as VisualCustomAction;
    impl crate::value::ToValue for VisualCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualcustomactionoperation.html
    pub struct VisualCustomActionOperation_ {
        pub filter_operation: Option<Box<CustomActionFilterOperation_>>,
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualCustomActionOperation as VisualCustomActionOperation;
    impl crate::value::ToValue for VisualCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filter_operation {
                properties.insert(
                    "FilterOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualinteractionoptions.html
    pub struct VisualInteractionOptions_ {
        pub context_menu_option: Option<Box<ContextMenuOption_>>,
        pub visual_menu_option: Option<Box<VisualMenuOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualInteractionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualInteractionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualInteractionOptions as VisualInteractionOptions;
    impl crate::value::ToValue for VisualInteractionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.context_menu_option {
                properties.insert(
                    "ContextMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_menu_option {
                properties.insert(
                    "VisualMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualmenuoption.html
    pub struct VisualMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualMenuOption as VisualMenuOption;
    impl crate::value::ToValue for VisualMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualpalette.html
    pub struct VisualPalette_ {
        pub chart_color: Option<crate::value::ExpString>,
        pub color_map: Option<Vec<DataPathColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualPalette {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualPalette"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualPalette as VisualPalette;
    impl crate::value::ToValue for VisualPalette_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_color {
                properties.insert(
                    "ChartColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_map {
                properties.insert(
                    "ColorMap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualsubtitlelabeloptions.html
    pub struct VisualSubtitleLabelOptions_ {
        pub format_text: Option<Box<LongFormatText_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualSubtitleLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualSubtitleLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualSubtitleLabelOptions as VisualSubtitleLabelOptions;
    impl crate::value::ToValue for VisualSubtitleLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_text {
                properties.insert(
                    "FormatText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-visualtitlelabeloptions.html
    pub struct VisualTitleLabelOptions_ {
        pub format_text: Option<Box<ShortFormatText_>>,
        pub visibility: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_VisualTitleLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.VisualTitleLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_VisualTitleLabelOptions as VisualTitleLabelOptions;
    impl crate::value::ToValue for VisualTitleLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_text {
                properties.insert(
                    "FormatText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartaggregatedfieldwells.html
    pub struct WaterfallChartAggregatedFieldWells_ {
        pub breakdowns: Option<Vec<DimensionField_>>,
        pub categories: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartAggregatedFieldWells as WaterfallChartAggregatedFieldWells;
    impl crate::value::ToValue for WaterfallChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.breakdowns {
                properties.insert(
                    "Breakdowns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categories {
                properties.insert(
                    "Categories".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartcolorconfiguration.html
    pub struct WaterfallChartColorConfiguration_ {
        pub group_color_configuration: Option<Box<WaterfallChartGroupColorConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartColorConfiguration as WaterfallChartColorConfiguration;
    impl crate::value::ToValue for WaterfallChartColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_color_configuration {
                properties.insert(
                    "GroupColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartconfiguration.html
    pub struct WaterfallChartConfiguration_ {
        pub category_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub category_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_configuration: Option<Box<WaterfallChartColorConfiguration_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<WaterfallChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<WaterfallChartSortConfiguration_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub waterfall_chart_options: Option<Box<WaterfallChartOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartConfiguration as WaterfallChartConfiguration;
    impl crate::value::ToValue for WaterfallChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_axis_display_options {
                properties.insert(
                    "CategoryAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis_label_options {
                properties.insert(
                    "CategoryAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_configuration {
                properties.insert(
                    "ColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.waterfall_chart_options {
                properties.insert(
                    "WaterfallChartOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartfieldwells.html
    pub struct WaterfallChartFieldWells_ {
        pub waterfall_chart_aggregated_field_wells:
            Option<Box<WaterfallChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartFieldWells as WaterfallChartFieldWells;
    impl crate::value::ToValue for WaterfallChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.waterfall_chart_aggregated_field_wells {
                properties.insert(
                    "WaterfallChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartgroupcolorconfiguration.html
    pub struct WaterfallChartGroupColorConfiguration_ {
        pub negative_bar_color: Option<crate::value::ExpString>,
        pub positive_bar_color: Option<crate::value::ExpString>,
        pub total_bar_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartGroupColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartGroupColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartGroupColorConfiguration as WaterfallChartGroupColorConfiguration;
    impl crate::value::ToValue for WaterfallChartGroupColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.negative_bar_color {
                properties.insert(
                    "NegativeBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.positive_bar_color {
                properties.insert(
                    "PositiveBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_bar_color {
                properties.insert(
                    "TotalBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartoptions.html
    pub struct WaterfallChartOptions_ {
        pub total_bar_label: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartOptions as WaterfallChartOptions;
    impl crate::value::ToValue for WaterfallChartOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.total_bar_label {
                properties.insert(
                    "TotalBarLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallchartsortconfiguration.html
    pub struct WaterfallChartSortConfiguration_ {
        pub breakdown_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallChartSortConfiguration as WaterfallChartSortConfiguration;
    impl crate::value::ToValue for WaterfallChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.breakdown_items_limit {
                properties.insert(
                    "BreakdownItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-waterfallvisual.html
    pub struct WaterfallVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<WaterfallChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WaterfallVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WaterfallVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WaterfallVisual as WaterfallVisual;
    impl crate::value::ToValue for WaterfallVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-whatifpointscenario.html
    pub struct WhatIfPointScenario_ {
        pub date: crate::value::ExpString,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WhatIfPointScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WhatIfPointScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WhatIfPointScenario as WhatIfPointScenario;
    impl crate::value::ToValue for WhatIfPointScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Date".to_string(),
                crate::value::ToValue::to_value(&self.date),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-whatifrangescenario.html
    pub struct WhatIfRangeScenario_ {
        pub end_date: crate::value::ExpString,
        pub start_date: crate::value::ExpString,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WhatIfRangeScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WhatIfRangeScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WhatIfRangeScenario as WhatIfRangeScenario;
    impl crate::value::ToValue for WhatIfRangeScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "EndDate".to_string(),
                crate::value::ToValue::to_value(&self.end_date),
            );
            properties.insert(
                "StartDate".to_string(),
                crate::value::ToValue::to_value(&self.start_date),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-wordcloudaggregatedfieldwells.html
    pub struct WordCloudAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WordCloudAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WordCloudAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WordCloudAggregatedFieldWells as WordCloudAggregatedFieldWells;
    impl crate::value::ToValue for WordCloudAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-wordcloudchartconfiguration.html
    pub struct WordCloudChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<WordCloudFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<WordCloudSortConfiguration_>>,
        pub word_cloud_options: Option<Box<WordCloudOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WordCloudChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WordCloudChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WordCloudChartConfiguration as WordCloudChartConfiguration;
    impl crate::value::ToValue for WordCloudChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_cloud_options {
                properties.insert(
                    "WordCloudOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-wordcloudfieldwells.html
    pub struct WordCloudFieldWells_ {
        pub word_cloud_aggregated_field_wells: Option<Box<WordCloudAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WordCloudFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WordCloudFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WordCloudFieldWells as WordCloudFieldWells;
    impl crate::value::ToValue for WordCloudFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.word_cloud_aggregated_field_wells {
                properties.insert(
                    "WordCloudAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-wordcloudoptions.html
    pub struct WordCloudOptions_ {
        pub cloud_layout: Option<crate::value::ExpString>,
        pub maximum_string_length: Option<f64>,
        pub word_casing: Option<crate::value::ExpString>,
        pub word_orientation: Option<crate::value::ExpString>,
        pub word_padding: Option<crate::value::ExpString>,
        pub word_scaling: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WordCloudOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WordCloudOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WordCloudOptions as WordCloudOptions;
    impl crate::value::ToValue for WordCloudOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cloud_layout {
                properties.insert(
                    "CloudLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_string_length {
                properties.insert(
                    "MaximumStringLength".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_casing {
                properties.insert(
                    "WordCasing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_orientation {
                properties.insert(
                    "WordOrientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_padding {
                properties.insert(
                    "WordPadding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_scaling {
                properties.insert(
                    "WordScaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-wordcloudsortconfiguration.html
    pub struct WordCloudSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WordCloudSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WordCloudSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WordCloudSortConfiguration as WordCloudSortConfiguration;
    impl crate::value::ToValue for WordCloudSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-wordcloudvisual.html
    pub struct WordCloudVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<WordCloudChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_WordCloudVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.WordCloudVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_WordCloudVisual as WordCloudVisual;
    impl crate::value::ToValue for WordCloudVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-yaxisoptions.html
    pub struct YAxisOptions_ {
        pub y_axis: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Dashboard_YAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Dashboard.YAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Dashboard_YAxisOptions as YAxisOptions;
    impl crate::value::ToValue for YAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "YAxis".to_string(),
                crate::value::ToValue::to_value(&self.y_axis),
            );
            properties.into()
        }
    }
}
pub mod dataset {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-aggregateoperation.html
    pub struct AggregateOperation_ {
        pub aggregations: Vec<Aggregation_>,
        pub alias: crate::value::ExpString,
        pub group_by_column_names: Option<Vec<crate::value::ExpString>>,
        pub source: Box<TransformOperationSource_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_AggregateOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.AggregateOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_AggregateOperation as AggregateOperation;
    impl crate::value::ToValue for AggregateOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Aggregations".to_string(),
                crate::value::ToValue::to_value(&self.aggregations),
            );
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            if let Some(ref value) = self.group_by_column_names {
                properties.insert(
                    "GroupByColumnNames".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-aggregation.html
    pub struct Aggregation_ {
        pub aggregation_function: Box<DataPrepAggregationFunction_>,
        pub new_column_id: crate::value::ExpString,
        pub new_column_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_Aggregation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.Aggregation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_Aggregation as Aggregation;
    impl crate::value::ToValue for Aggregation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AggregationFunction".to_string(),
                crate::value::ToValue::to_value(&self.aggregation_function),
            );
            properties.insert(
                "NewColumnId".to_string(),
                crate::value::ToValue::to_value(&self.new_column_id),
            );
            properties.insert(
                "NewColumnName".to_string(),
                crate::value::ToValue::to_value(&self.new_column_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-appendoperation.html
    pub struct AppendOperation_ {
        pub alias: crate::value::ExpString,
        pub appended_columns: Vec<AppendedColumn_>,
        pub first_source: Option<Box<TransformOperationSource_>>,
        pub second_source: Option<Box<TransformOperationSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_AppendOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.AppendOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_AppendOperation as AppendOperation;
    impl crate::value::ToValue for AppendOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "AppendedColumns".to_string(),
                crate::value::ToValue::to_value(&self.appended_columns),
            );
            if let Some(ref value) = self.first_source {
                properties.insert(
                    "FirstSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.second_source {
                properties.insert(
                    "SecondSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-appendedcolumn.html
    pub struct AppendedColumn_ {
        pub column_name: crate::value::ExpString,
        pub new_column_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_AppendedColumn {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.AppendedColumn"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_AppendedColumn as AppendedColumn;
    impl crate::value::ToValue for AppendedColumn_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "NewColumnId".to_string(),
                crate::value::ToValue::to_value(&self.new_column_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-calculatedcolumn.html
    pub struct CalculatedColumn_ {
        pub column_id: crate::value::ExpString,
        pub column_name: crate::value::ExpString,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_CalculatedColumn {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.CalculatedColumn"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_CalculatedColumn as CalculatedColumn;
    impl crate::value::ToValue for CalculatedColumn_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnId".to_string(),
                crate::value::ToValue::to_value(&self.column_id),
            );
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-castcolumntypeoperation.html
    pub struct CastColumnTypeOperation_ {
        pub column_name: crate::value::ExpString,
        pub format: Option<crate::value::ExpString>,
        pub new_column_type: crate::value::ExpString,
        pub sub_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_CastColumnTypeOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.CastColumnTypeOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_CastColumnTypeOperation as CastColumnTypeOperation;
    impl crate::value::ToValue for CastColumnTypeOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            if let Some(ref value) = self.format {
                properties.insert("Format".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "NewColumnType".to_string(),
                crate::value::ToValue::to_value(&self.new_column_type),
            );
            if let Some(ref value) = self.sub_type {
                properties.insert(
                    "SubType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-castcolumntypesoperation.html
    pub struct CastColumnTypesOperation_ {
        pub alias: crate::value::ExpString,
        pub cast_column_type_operations: Vec<CastColumnTypeOperation_>,
        pub source: Box<TransformOperationSource_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_CastColumnTypesOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.CastColumnTypesOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_CastColumnTypesOperation as CastColumnTypesOperation;
    impl crate::value::ToValue for CastColumnTypesOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "CastColumnTypeOperations".to_string(),
                crate::value::ToValue::to_value(&self.cast_column_type_operations),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-columngroup.html
    pub struct ColumnGroup_ {
        pub geo_spatial_column_group: Option<Box<GeoSpatialColumnGroup_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ColumnGroup {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ColumnGroup"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ColumnGroup as ColumnGroup;
    impl crate::value::ToValue for ColumnGroup_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geo_spatial_column_group {
                properties.insert(
                    "GeoSpatialColumnGroup".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-columnlevelpermissionrule.html
    pub struct ColumnLevelPermissionRule_ {
        pub column_names: Option<Vec<crate::value::ExpString>>,
        pub principals: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ColumnLevelPermissionRule {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ColumnLevelPermissionRule"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ColumnLevelPermissionRule as ColumnLevelPermissionRule;
    impl crate::value::ToValue for ColumnLevelPermissionRule_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_names {
                properties.insert(
                    "ColumnNames".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.principals {
                properties.insert(
                    "Principals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-columntounpivot.html
    pub struct ColumnToUnpivot_ {
        pub column_name: Option<crate::value::ExpString>,
        pub new_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ColumnToUnpivot {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ColumnToUnpivot"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ColumnToUnpivot as ColumnToUnpivot;
    impl crate::value::ToValue for ColumnToUnpivot_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_name {
                properties.insert(
                    "ColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.new_value {
                properties.insert(
                    "NewValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-createcolumnsoperation.html
    pub struct CreateColumnsOperation_ {
        pub alias: Option<crate::value::ExpString>,
        pub columns: Vec<CalculatedColumn_>,
        pub source: Option<Box<TransformOperationSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_CreateColumnsOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.CreateColumnsOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_CreateColumnsOperation as CreateColumnsOperation;
    impl crate::value::ToValue for CreateColumnsOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alias {
                properties.insert("Alias".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-customsql.html
    pub struct CustomSql_ {
        pub columns: Vec<InputColumn_>,
        pub data_source_arn: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub sql_query: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_CustomSql {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.CustomSql"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_CustomSql as CustomSql;
    impl crate::value::ToValue for CustomSql_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            properties.insert(
                "DataSourceArn".to_string(),
                crate::value::ToValue::to_value(&self.data_source_arn),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "SqlQuery".to_string(),
                crate::value::ToValue::to_value(&self.sql_query),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-dataprepaggregationfunction.html
    pub struct DataPrepAggregationFunction_ {
        pub list_aggregation: Option<Box<DataPrepListAggregationFunction_>>,
        pub percentile_aggregation: Option<Box<DataPrepPercentileAggregationFunction_>>,
        pub simple_aggregation: Option<Box<DataPrepSimpleAggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataPrepAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataPrepAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataPrepAggregationFunction as DataPrepAggregationFunction;
    impl crate::value::ToValue for DataPrepAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.list_aggregation {
                properties.insert(
                    "ListAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentile_aggregation {
                properties.insert(
                    "PercentileAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.simple_aggregation {
                properties.insert(
                    "SimpleAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-dataprepconfiguration.html
    pub struct DataPrepConfiguration_ {
        pub destination_table_map: std::collections::BTreeMap<String, DestinationTable_>,
        pub source_table_map: std::collections::BTreeMap<String, SourceTable_>,
        pub transform_step_map: std::collections::BTreeMap<String, TransformStep_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataPrepConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataPrepConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataPrepConfiguration as DataPrepConfiguration;
    impl crate::value::ToValue for DataPrepConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DestinationTableMap".to_string(),
                crate::value::ToValue::to_value(&self.destination_table_map),
            );
            properties.insert(
                "SourceTableMap".to_string(),
                crate::value::ToValue::to_value(&self.source_table_map),
            );
            properties.insert(
                "TransformStepMap".to_string(),
                crate::value::ToValue::to_value(&self.transform_step_map),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datapreplistaggregationfunction.html
    pub struct DataPrepListAggregationFunction_ {
        pub distinct: crate::value::ExpBool,
        pub input_column_name: Option<crate::value::ExpString>,
        pub separator: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataPrepListAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataPrepListAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataPrepListAggregationFunction as DataPrepListAggregationFunction;
    impl crate::value::ToValue for DataPrepListAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Distinct".to_string(),
                crate::value::ToValue::to_value(&self.distinct),
            );
            if let Some(ref value) = self.input_column_name {
                properties.insert(
                    "InputColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Separator".to_string(),
                crate::value::ToValue::to_value(&self.separator),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datapreppercentileaggregationfunction.html
    pub struct DataPrepPercentileAggregationFunction_ {
        pub input_column_name: Option<crate::value::ExpString>,
        pub percentile_value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataPrepPercentileAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataPrepPercentileAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataPrepPercentileAggregationFunction as DataPrepPercentileAggregationFunction;
    impl crate::value::ToValue for DataPrepPercentileAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.input_column_name {
                properties.insert(
                    "InputColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PercentileValue".to_string(),
                crate::value::ToValue::to_value(&self.percentile_value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-dataprepsimpleaggregationfunction.html
    pub struct DataPrepSimpleAggregationFunction_ {
        pub function_type: crate::value::ExpString,
        pub input_column_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataPrepSimpleAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataPrepSimpleAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataPrepSimpleAggregationFunction as DataPrepSimpleAggregationFunction;
    impl crate::value::ToValue for DataPrepSimpleAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FunctionType".to_string(),
                crate::value::ToValue::to_value(&self.function_type),
            );
            if let Some(ref value) = self.input_column_name {
                properties.insert(
                    "InputColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetcolumnidmapping.html
    pub struct DataSetColumnIdMapping_ {
        pub source_column_id: crate::value::ExpString,
        pub target_column_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetColumnIdMapping {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetColumnIdMapping"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetColumnIdMapping as DataSetColumnIdMapping;
    impl crate::value::ToValue for DataSetColumnIdMapping_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "SourceColumnId".to_string(),
                crate::value::ToValue::to_value(&self.source_column_id),
            );
            properties.insert(
                "TargetColumnId".to_string(),
                crate::value::ToValue::to_value(&self.target_column_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetdatecomparisonfiltercondition.html
    pub struct DataSetDateComparisonFilterCondition_ {
        pub operator: crate::value::ExpString,
        pub value: Option<Box<DataSetDateFilterValue_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetDateComparisonFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetDateComparisonFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetDateComparisonFilterCondition as DataSetDateComparisonFilterCondition;
    impl crate::value::ToValue for DataSetDateComparisonFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Operator".to_string(),
                crate::value::ToValue::to_value(&self.operator),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetdatefiltercondition.html
    pub struct DataSetDateFilterCondition_ {
        pub column_name: Option<crate::value::ExpString>,
        pub comparison_filter_condition: Option<Box<DataSetDateComparisonFilterCondition_>>,
        pub range_filter_condition: Option<Box<DataSetDateRangeFilterCondition_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetDateFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetDateFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetDateFilterCondition as DataSetDateFilterCondition;
    impl crate::value::ToValue for DataSetDateFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_name {
                properties.insert(
                    "ColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_filter_condition {
                properties.insert(
                    "ComparisonFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_filter_condition {
                properties.insert(
                    "RangeFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetdatefiltervalue.html
    pub struct DataSetDateFilterValue_ {
        pub static_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetDateFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetDateFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetDateFilterValue as DataSetDateFilterValue;
    impl crate::value::ToValue for DataSetDateFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetdaterangefiltercondition.html
    pub struct DataSetDateRangeFilterCondition_ {
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub range_maximum: Option<Box<DataSetDateFilterValue_>>,
        pub range_minimum: Option<Box<DataSetDateFilterValue_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetDateRangeFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetDateRangeFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetDateRangeFilterCondition as DataSetDateRangeFilterCondition;
    impl crate::value::ToValue for DataSetDateRangeFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_maximum {
                properties.insert(
                    "RangeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum {
                properties.insert(
                    "RangeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetnumericcomparisonfiltercondition.html
    pub struct DataSetNumericComparisonFilterCondition_ {
        pub operator: crate::value::ExpString,
        pub value: Option<Box<DataSetNumericFilterValue_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetNumericComparisonFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetNumericComparisonFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetNumericComparisonFilterCondition as DataSetNumericComparisonFilterCondition;
    impl crate::value::ToValue for DataSetNumericComparisonFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Operator".to_string(),
                crate::value::ToValue::to_value(&self.operator),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetnumericfiltercondition.html
    pub struct DataSetNumericFilterCondition_ {
        pub column_name: Option<crate::value::ExpString>,
        pub comparison_filter_condition: Option<Box<DataSetNumericComparisonFilterCondition_>>,
        pub range_filter_condition: Option<Box<DataSetNumericRangeFilterCondition_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetNumericFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetNumericFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetNumericFilterCondition as DataSetNumericFilterCondition;
    impl crate::value::ToValue for DataSetNumericFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_name {
                properties.insert(
                    "ColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_filter_condition {
                properties.insert(
                    "ComparisonFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_filter_condition {
                properties.insert(
                    "RangeFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetnumericfiltervalue.html
    pub struct DataSetNumericFilterValue_ {
        pub static_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetNumericFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetNumericFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetNumericFilterValue as DataSetNumericFilterValue;
    impl crate::value::ToValue for DataSetNumericFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetnumericrangefiltercondition.html
    pub struct DataSetNumericRangeFilterCondition_ {
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub range_maximum: Option<Box<DataSetNumericFilterValue_>>,
        pub range_minimum: Option<Box<DataSetNumericFilterValue_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetNumericRangeFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetNumericRangeFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetNumericRangeFilterCondition as DataSetNumericRangeFilterCondition;
    impl crate::value::ToValue for DataSetNumericRangeFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_maximum {
                properties.insert(
                    "RangeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum {
                properties.insert(
                    "RangeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetrefreshproperties.html
    pub struct DataSetRefreshProperties_ {
        pub failure_configuration: Option<Box<RefreshFailureConfiguration_>>,
        pub refresh_configuration: Option<Box<RefreshConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetRefreshProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetRefreshProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetRefreshProperties as DataSetRefreshProperties;
    impl crate::value::ToValue for DataSetRefreshProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.failure_configuration {
                properties.insert(
                    "FailureConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.refresh_configuration {
                properties.insert(
                    "RefreshConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetstringcomparisonfiltercondition.html
    pub struct DataSetStringComparisonFilterCondition_ {
        pub operator: crate::value::ExpString,
        pub value: Option<Box<DataSetStringFilterValue_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetStringComparisonFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetStringComparisonFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetStringComparisonFilterCondition as DataSetStringComparisonFilterCondition;
    impl crate::value::ToValue for DataSetStringComparisonFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Operator".to_string(),
                crate::value::ToValue::to_value(&self.operator),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetstringfiltercondition.html
    pub struct DataSetStringFilterCondition_ {
        pub column_name: Option<crate::value::ExpString>,
        pub comparison_filter_condition: Option<Box<DataSetStringComparisonFilterCondition_>>,
        pub list_filter_condition: Option<Box<DataSetStringListFilterCondition_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetStringFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetStringFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetStringFilterCondition as DataSetStringFilterCondition;
    impl crate::value::ToValue for DataSetStringFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_name {
                properties.insert(
                    "ColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_filter_condition {
                properties.insert(
                    "ComparisonFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list_filter_condition {
                properties.insert(
                    "ListFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetstringfiltervalue.html
    pub struct DataSetStringFilterValue_ {
        pub static_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetStringFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetStringFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetStringFilterValue as DataSetStringFilterValue;
    impl crate::value::ToValue for DataSetStringFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetstringlistfiltercondition.html
    pub struct DataSetStringListFilterCondition_ {
        pub operator: crate::value::ExpString,
        pub values: Option<Box<DataSetStringListFilterValue_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetStringListFilterCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetStringListFilterCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetStringListFilterCondition as DataSetStringListFilterCondition;
    impl crate::value::ToValue for DataSetStringListFilterCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Operator".to_string(),
                crate::value::ToValue::to_value(&self.operator),
            );
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetstringlistfiltervalue.html
    pub struct DataSetStringListFilterValue_ {
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetStringListFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetStringListFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetStringListFilterValue as DataSetStringListFilterValue;
    impl crate::value::ToValue for DataSetStringListFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetusageconfiguration.html
    pub struct DataSetUsageConfiguration_ {
        pub disable_use_as_direct_query_source: Option<crate::value::ExpBool>,
        pub disable_use_as_imported_source: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DataSetUsageConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DataSetUsageConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DataSetUsageConfiguration as DataSetUsageConfiguration;
    impl crate::value::ToValue for DataSetUsageConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.disable_use_as_direct_query_source {
                properties.insert(
                    "DisableUseAsDirectQuerySource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.disable_use_as_imported_source {
                properties.insert(
                    "DisableUseAsImportedSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datasetparameter.html
    pub struct DatasetParameter_ {
        pub date_time_dataset_parameter: Option<Box<DateTimeDatasetParameter_>>,
        pub decimal_dataset_parameter: Option<Box<DecimalDatasetParameter_>>,
        pub integer_dataset_parameter: Option<Box<IntegerDatasetParameter_>>,
        pub string_dataset_parameter: Option<Box<StringDatasetParameter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DatasetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DatasetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DatasetParameter as DatasetParameter;
    impl crate::value::ToValue for DatasetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_dataset_parameter {
                properties.insert(
                    "DateTimeDatasetParameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_dataset_parameter {
                properties.insert(
                    "DecimalDatasetParameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_dataset_parameter {
                properties.insert(
                    "IntegerDatasetParameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_dataset_parameter {
                properties.insert(
                    "StringDatasetParameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datetimedatasetparameter.html
    pub struct DateTimeDatasetParameter_ {
        pub default_values: Option<Box<DateTimeDatasetParameterDefaultValues_>>,
        pub id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DateTimeDatasetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DateTimeDatasetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DateTimeDatasetParameter as DateTimeDatasetParameter;
    impl crate::value::ToValue for DateTimeDatasetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert("Id".to_string(), crate::value::ToValue::to_value(&self.id));
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ValueType".to_string(),
                crate::value::ToValue::to_value(&self.value_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-datetimedatasetparameterdefaultvalues.html
    pub struct DateTimeDatasetParameterDefaultValues_ {
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DateTimeDatasetParameterDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DateTimeDatasetParameterDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DateTimeDatasetParameterDefaultValues as DateTimeDatasetParameterDefaultValues;
    impl crate::value::ToValue for DateTimeDatasetParameterDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-decimaldatasetparameter.html
    pub struct DecimalDatasetParameter_ {
        pub default_values: Option<Box<DecimalDatasetParameterDefaultValues_>>,
        pub id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub value_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DecimalDatasetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DecimalDatasetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DecimalDatasetParameter as DecimalDatasetParameter;
    impl crate::value::ToValue for DecimalDatasetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert("Id".to_string(), crate::value::ToValue::to_value(&self.id));
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ValueType".to_string(),
                crate::value::ToValue::to_value(&self.value_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-decimaldatasetparameterdefaultvalues.html
    pub struct DecimalDatasetParameterDefaultValues_ {
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DecimalDatasetParameterDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DecimalDatasetParameterDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DecimalDatasetParameterDefaultValues as DecimalDatasetParameterDefaultValues;
    impl crate::value::ToValue for DecimalDatasetParameterDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-destinationtable.html
    pub struct DestinationTable_ {
        pub alias: crate::value::ExpString,
        pub source: Box<DestinationTableSource_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DestinationTable {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DestinationTable"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DestinationTable as DestinationTable;
    impl crate::value::ToValue for DestinationTable_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-destinationtablesource.html
    pub struct DestinationTableSource_ {
        pub transform_operation_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_DestinationTableSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.DestinationTableSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_DestinationTableSource as DestinationTableSource;
    impl crate::value::ToValue for DestinationTableSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "TransformOperationId".to_string(),
                crate::value::ToValue::to_value(&self.transform_operation_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-fieldfolder.html
    pub struct FieldFolder_ {
        pub columns: Option<Vec<crate::value::ExpString>>,
        pub description: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_FieldFolder {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.FieldFolder"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_FieldFolder as FieldFolder;
    impl crate::value::ToValue for FieldFolder_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-filteroperation.html
    pub struct FilterOperation_ {
        pub condition_expression: Option<crate::value::ExpString>,
        pub date_filter_condition: Option<Box<DataSetDateFilterCondition_>>,
        pub numeric_filter_condition: Option<Box<DataSetNumericFilterCondition_>>,
        pub string_filter_condition: Option<Box<DataSetStringFilterCondition_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_FilterOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.FilterOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_FilterOperation as FilterOperation;
    impl crate::value::ToValue for FilterOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.condition_expression {
                properties.insert(
                    "ConditionExpression".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_filter_condition {
                properties.insert(
                    "DateFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_filter_condition {
                properties.insert(
                    "NumericFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_filter_condition {
                properties.insert(
                    "StringFilterCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-filtersoperation.html
    pub struct FiltersOperation_ {
        pub alias: crate::value::ExpString,
        pub filter_operations: Vec<FilterOperation_>,
        pub source: Box<TransformOperationSource_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_FiltersOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.FiltersOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_FiltersOperation as FiltersOperation;
    impl crate::value::ToValue for FiltersOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "FilterOperations".to_string(),
                crate::value::ToValue::to_value(&self.filter_operations),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-geospatialcolumngroup.html
    pub struct GeoSpatialColumnGroup_ {
        pub columns: Vec<crate::value::ExpString>,
        pub country_code: Option<crate::value::ExpString>,
        pub name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_GeoSpatialColumnGroup {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.GeoSpatialColumnGroup"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_GeoSpatialColumnGroup as GeoSpatialColumnGroup;
    impl crate::value::ToValue for GeoSpatialColumnGroup_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.country_code {
                properties.insert(
                    "CountryCode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-importtableoperation.html
    pub struct ImportTableOperation_ {
        pub alias: crate::value::ExpString,
        pub source: Box<ImportTableOperationSource_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ImportTableOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ImportTableOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ImportTableOperation as ImportTableOperation;
    impl crate::value::ToValue for ImportTableOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-importtableoperationsource.html
    pub struct ImportTableOperationSource_ {
        pub column_id_mappings: Option<Vec<DataSetColumnIdMapping_>>,
        pub source_table_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ImportTableOperationSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ImportTableOperationSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ImportTableOperationSource as ImportTableOperationSource;
    impl crate::value::ToValue for ImportTableOperationSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_id_mappings {
                properties.insert(
                    "ColumnIdMappings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceTableId".to_string(),
                crate::value::ToValue::to_value(&self.source_table_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-incrementalrefresh.html
    pub struct IncrementalRefresh_ {
        pub lookback_window: Box<LookbackWindow_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_IncrementalRefresh {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.IncrementalRefresh"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_IncrementalRefresh as IncrementalRefresh;
    impl crate::value::ToValue for IncrementalRefresh_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "LookbackWindow".to_string(),
                crate::value::ToValue::to_value(&self.lookback_window),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-ingestionwaitpolicy.html
    pub struct IngestionWaitPolicy_ {
        pub ingestion_wait_time_in_hours: Option<f64>,
        pub wait_for_spice_ingestion: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_IngestionWaitPolicy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.IngestionWaitPolicy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_IngestionWaitPolicy as IngestionWaitPolicy;
    impl crate::value::ToValue for IngestionWaitPolicy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.ingestion_wait_time_in_hours {
                properties.insert(
                    "IngestionWaitTimeInHours".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.wait_for_spice_ingestion {
                properties.insert(
                    "WaitForSpiceIngestion".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-inputcolumn.html
    pub struct InputColumn_ {
        pub id: Option<crate::value::ExpString>,
        pub name: crate::value::ExpString,
        pub sub_type: Option<crate::value::ExpString>,
        pub r#type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_InputColumn {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.InputColumn"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_InputColumn as InputColumn;
    impl crate::value::ToValue for InputColumn_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.id {
                properties.insert("Id".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.sub_type {
                properties.insert(
                    "SubType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-integerdatasetparameter.html
    pub struct IntegerDatasetParameter_ {
        pub default_values: Option<Box<IntegerDatasetParameterDefaultValues_>>,
        pub id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub value_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_IntegerDatasetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.IntegerDatasetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_IntegerDatasetParameter as IntegerDatasetParameter;
    impl crate::value::ToValue for IntegerDatasetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert("Id".to_string(), crate::value::ToValue::to_value(&self.id));
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ValueType".to_string(),
                crate::value::ToValue::to_value(&self.value_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-integerdatasetparameterdefaultvalues.html
    pub struct IntegerDatasetParameterDefaultValues_ {
        pub static_values: Option<Vec<i64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_IntegerDatasetParameterDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.IntegerDatasetParameterDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_IntegerDatasetParameterDefaultValues as IntegerDatasetParameterDefaultValues;
    impl crate::value::ToValue for IntegerDatasetParameterDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-joinoperandproperties.html
    pub struct JoinOperandProperties_ {
        pub output_column_name_overrides: Vec<OutputColumnNameOverride_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_JoinOperandProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.JoinOperandProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_JoinOperandProperties as JoinOperandProperties;
    impl crate::value::ToValue for JoinOperandProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "OutputColumnNameOverrides".to_string(),
                crate::value::ToValue::to_value(&self.output_column_name_overrides),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-joinoperation.html
    pub struct JoinOperation_ {
        pub alias: crate::value::ExpString,
        pub left_operand: Box<TransformOperationSource_>,
        pub left_operand_properties: Option<Box<JoinOperandProperties_>>,
        pub on_clause: crate::value::ExpString,
        pub right_operand: Box<TransformOperationSource_>,
        pub right_operand_properties: Option<Box<JoinOperandProperties_>>,
        pub r#type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_JoinOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.JoinOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_JoinOperation as JoinOperation;
    impl crate::value::ToValue for JoinOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "LeftOperand".to_string(),
                crate::value::ToValue::to_value(&self.left_operand),
            );
            if let Some(ref value) = self.left_operand_properties {
                properties.insert(
                    "LeftOperandProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "OnClause".to_string(),
                crate::value::ToValue::to_value(&self.on_clause),
            );
            properties.insert(
                "RightOperand".to_string(),
                crate::value::ToValue::to_value(&self.right_operand),
            );
            if let Some(ref value) = self.right_operand_properties {
                properties.insert(
                    "RightOperandProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-lookbackwindow.html
    pub struct LookbackWindow_ {
        pub column_name: crate::value::ExpString,
        pub size: f64,
        pub size_unit: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_LookbackWindow {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.LookbackWindow"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_LookbackWindow as LookbackWindow;
    impl crate::value::ToValue for LookbackWindow_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "Size".to_string(),
                crate::value::ToValue::to_value(&self.size),
            );
            properties.insert(
                "SizeUnit".to_string(),
                crate::value::ToValue::to_value(&self.size_unit),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-outputcolumn.html
    pub struct OutputColumn_ {
        pub description: Option<crate::value::ExpString>,
        pub id: Option<crate::value::ExpString>,
        pub name: Option<crate::value::ExpString>,
        pub sub_type: Option<crate::value::ExpString>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_OutputColumn {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.OutputColumn"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_OutputColumn as OutputColumn;
    impl crate::value::ToValue for OutputColumn_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.id {
                properties.insert("Id".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sub_type {
                properties.insert(
                    "SubType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-outputcolumnnameoverride.html
    pub struct OutputColumnNameOverride_ {
        pub output_column_name: crate::value::ExpString,
        pub source_column_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_OutputColumnNameOverride {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.OutputColumnNameOverride"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_OutputColumnNameOverride as OutputColumnNameOverride;
    impl crate::value::ToValue for OutputColumnNameOverride_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "OutputColumnName".to_string(),
                crate::value::ToValue::to_value(&self.output_column_name),
            );
            if let Some(ref value) = self.source_column_name {
                properties.insert(
                    "SourceColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-parentdataset.html
    pub struct ParentDataSet_ {
        pub data_set_arn: crate::value::ExpString,
        pub input_columns: Vec<InputColumn_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ParentDataSet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ParentDataSet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ParentDataSet as ParentDataSet;
    impl crate::value::ToValue for ParentDataSet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetArn".to_string(),
                crate::value::ToValue::to_value(&self.data_set_arn),
            );
            properties.insert(
                "InputColumns".to_string(),
                crate::value::ToValue::to_value(&self.input_columns),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-performanceconfiguration.html
    pub struct PerformanceConfiguration_ {
        pub unique_keys: Option<Vec<UniqueKey_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_PerformanceConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.PerformanceConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_PerformanceConfiguration as PerformanceConfiguration;
    impl crate::value::ToValue for PerformanceConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.unique_keys {
                properties.insert(
                    "UniqueKeys".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-physicaltable.html
    pub struct PhysicalTable_ {
        pub custom_sql: Option<Box<CustomSql_>>,
        pub relational_table: Option<Box<RelationalTable_>>,
        pub s3_source: Option<Box<S3Source_>>,
        pub saa_s_table: Option<Box<SaaSTable_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_PhysicalTable {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.PhysicalTable"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_PhysicalTable as PhysicalTable;
    impl crate::value::ToValue for PhysicalTable_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_sql {
                properties.insert(
                    "CustomSql".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relational_table {
                properties.insert(
                    "RelationalTable".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.s3_source {
                properties.insert(
                    "S3Source".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.saa_s_table {
                properties.insert(
                    "SaaSTable".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-pivotconfiguration.html
    pub struct PivotConfiguration_ {
        pub label_column_name: Option<crate::value::ExpString>,
        pub pivoted_labels: Vec<PivotedLabel_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_PivotConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.PivotConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_PivotConfiguration as PivotConfiguration;
    impl crate::value::ToValue for PivotConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_column_name {
                properties.insert(
                    "LabelColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PivotedLabels".to_string(),
                crate::value::ToValue::to_value(&self.pivoted_labels),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-pivotoperation.html
    pub struct PivotOperation_ {
        pub alias: crate::value::ExpString,
        pub group_by_column_names: Option<Vec<crate::value::ExpString>>,
        pub pivot_configuration: Box<PivotConfiguration_>,
        pub source: Box<TransformOperationSource_>,
        pub value_column_configuration: Box<ValueColumnConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_PivotOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.PivotOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_PivotOperation as PivotOperation;
    impl crate::value::ToValue for PivotOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            if let Some(ref value) = self.group_by_column_names {
                properties.insert(
                    "GroupByColumnNames".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PivotConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.pivot_configuration),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.insert(
                "ValueColumnConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.value_column_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-pivotedlabel.html
    pub struct PivotedLabel_ {
        pub label_name: crate::value::ExpString,
        pub new_column_id: crate::value::ExpString,
        pub new_column_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_PivotedLabel {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.PivotedLabel"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_PivotedLabel as PivotedLabel;
    impl crate::value::ToValue for PivotedLabel_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "LabelName".to_string(),
                crate::value::ToValue::to_value(&self.label_name),
            );
            properties.insert(
                "NewColumnId".to_string(),
                crate::value::ToValue::to_value(&self.new_column_id),
            );
            properties.insert(
                "NewColumnName".to_string(),
                crate::value::ToValue::to_value(&self.new_column_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-projectoperation.html
    pub struct ProjectOperation_ {
        pub alias: Option<crate::value::ExpString>,
        pub projected_columns: Option<Vec<crate::value::ExpString>>,
        pub source: Option<Box<TransformOperationSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ProjectOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ProjectOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ProjectOperation as ProjectOperation;
    impl crate::value::ToValue for ProjectOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alias {
                properties.insert("Alias".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.projected_columns {
                properties.insert(
                    "ProjectedColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-refreshconfiguration.html
    pub struct RefreshConfiguration_ {
        pub incremental_refresh: Box<IncrementalRefresh_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RefreshConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RefreshConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RefreshConfiguration as RefreshConfiguration;
    impl crate::value::ToValue for RefreshConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "IncrementalRefresh".to_string(),
                crate::value::ToValue::to_value(&self.incremental_refresh),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-refreshfailureconfiguration.html
    pub struct RefreshFailureConfiguration_ {
        pub email_alert: Option<Box<RefreshFailureEmailAlert_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RefreshFailureConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RefreshFailureConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RefreshFailureConfiguration as RefreshFailureConfiguration;
    impl crate::value::ToValue for RefreshFailureConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.email_alert {
                properties.insert(
                    "EmailAlert".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-refreshfailureemailalert.html
    pub struct RefreshFailureEmailAlert_ {
        pub alert_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RefreshFailureEmailAlert {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RefreshFailureEmailAlert"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RefreshFailureEmailAlert as RefreshFailureEmailAlert;
    impl crate::value::ToValue for RefreshFailureEmailAlert_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alert_status {
                properties.insert(
                    "AlertStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-relationaltable.html
    pub struct RelationalTable_ {
        pub catalog: Option<crate::value::ExpString>,
        pub data_source_arn: crate::value::ExpString,
        pub input_columns: Vec<InputColumn_>,
        pub name: crate::value::ExpString,
        pub schema: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RelationalTable {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RelationalTable"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RelationalTable as RelationalTable;
    impl crate::value::ToValue for RelationalTable_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.catalog {
                properties.insert(
                    "Catalog".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSourceArn".to_string(),
                crate::value::ToValue::to_value(&self.data_source_arn),
            );
            properties.insert(
                "InputColumns".to_string(),
                crate::value::ToValue::to_value(&self.input_columns),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.schema {
                properties.insert("Schema".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-renamecolumnoperation.html
    pub struct RenameColumnOperation_ {
        pub column_name: crate::value::ExpString,
        pub new_column_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RenameColumnOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RenameColumnOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RenameColumnOperation as RenameColumnOperation;
    impl crate::value::ToValue for RenameColumnOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "NewColumnName".to_string(),
                crate::value::ToValue::to_value(&self.new_column_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-renamecolumnsoperation.html
    pub struct RenameColumnsOperation_ {
        pub alias: crate::value::ExpString,
        pub rename_column_operations: Vec<RenameColumnOperation_>,
        pub source: Box<TransformOperationSource_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RenameColumnsOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RenameColumnsOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RenameColumnsOperation as RenameColumnsOperation;
    impl crate::value::ToValue for RenameColumnsOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "RenameColumnOperations".to_string(),
                crate::value::ToValue::to_value(&self.rename_column_operations),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-rowlevelpermissionconfiguration.html
    pub struct RowLevelPermissionConfiguration_ {
        pub row_level_permission_data_set: Option<Box<RowLevelPermissionDataSet_>>,
        pub tag_configuration: Option<Box<RowLevelPermissionTagConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RowLevelPermissionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RowLevelPermissionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RowLevelPermissionConfiguration as RowLevelPermissionConfiguration;
    impl crate::value::ToValue for RowLevelPermissionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.row_level_permission_data_set {
                properties.insert(
                    "RowLevelPermissionDataSet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tag_configuration {
                properties.insert(
                    "TagConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-rowlevelpermissiondataset.html
    pub struct RowLevelPermissionDataSet_ {
        pub arn: crate::value::ExpString,
        pub format_version: Option<crate::value::ExpString>,
        pub namespace: Option<crate::value::ExpString>,
        pub permission_policy: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RowLevelPermissionDataSet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RowLevelPermissionDataSet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RowLevelPermissionDataSet as RowLevelPermissionDataSet;
    impl crate::value::ToValue for RowLevelPermissionDataSet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Arn".to_string(),
                crate::value::ToValue::to_value(&self.arn),
            );
            if let Some(ref value) = self.format_version {
                properties.insert(
                    "FormatVersion".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.namespace {
                properties.insert(
                    "Namespace".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PermissionPolicy".to_string(),
                crate::value::ToValue::to_value(&self.permission_policy),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-rowlevelpermissiontagconfiguration.html
    pub struct RowLevelPermissionTagConfiguration_ {
        pub status: Option<crate::value::ExpString>,
        pub tag_rule_configurations: Option<serde_json::Value>,
        pub tag_rules: Vec<RowLevelPermissionTagRule_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RowLevelPermissionTagConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RowLevelPermissionTagConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RowLevelPermissionTagConfiguration as RowLevelPermissionTagConfiguration;
    impl crate::value::ToValue for RowLevelPermissionTagConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tag_rule_configurations {
                properties.insert(
                    "TagRuleConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TagRules".to_string(),
                crate::value::ToValue::to_value(&self.tag_rules),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-rowlevelpermissiontagrule.html
    pub struct RowLevelPermissionTagRule_ {
        pub column_name: crate::value::ExpString,
        pub match_all_value: Option<crate::value::ExpString>,
        pub tag_key: crate::value::ExpString,
        pub tag_multi_value_delimiter: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_RowLevelPermissionTagRule {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.RowLevelPermissionTagRule"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_RowLevelPermissionTagRule as RowLevelPermissionTagRule;
    impl crate::value::ToValue for RowLevelPermissionTagRule_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            if let Some(ref value) = self.match_all_value {
                properties.insert(
                    "MatchAllValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TagKey".to_string(),
                crate::value::ToValue::to_value(&self.tag_key),
            );
            if let Some(ref value) = self.tag_multi_value_delimiter {
                properties.insert(
                    "TagMultiValueDelimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-s3source.html
    pub struct S3Source_ {
        pub data_source_arn: crate::value::ExpString,
        pub input_columns: Vec<InputColumn_>,
        pub upload_settings: Option<Box<UploadSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_S3Source {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.S3Source"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_S3Source as S3Source;
    impl crate::value::ToValue for S3Source_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSourceArn".to_string(),
                crate::value::ToValue::to_value(&self.data_source_arn),
            );
            properties.insert(
                "InputColumns".to_string(),
                crate::value::ToValue::to_value(&self.input_columns),
            );
            if let Some(ref value) = self.upload_settings {
                properties.insert(
                    "UploadSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-saastable.html
    pub struct SaaSTable_ {
        pub data_source_arn: crate::value::ExpString,
        pub input_columns: Vec<InputColumn_>,
        pub table_path: Vec<TablePathElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_SaaSTable {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.SaaSTable"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_SaaSTable as SaaSTable;
    impl crate::value::ToValue for SaaSTable_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSourceArn".to_string(),
                crate::value::ToValue::to_value(&self.data_source_arn),
            );
            properties.insert(
                "InputColumns".to_string(),
                crate::value::ToValue::to_value(&self.input_columns),
            );
            properties.insert(
                "TablePath".to_string(),
                crate::value::ToValue::to_value(&self.table_path),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-semanticmodelconfiguration.html
    pub struct SemanticModelConfiguration_ {
        pub table_map: Option<std::collections::BTreeMap<String, SemanticTable_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_SemanticModelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.SemanticModelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_SemanticModelConfiguration as SemanticModelConfiguration;
    impl crate::value::ToValue for SemanticModelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_map {
                properties.insert(
                    "TableMap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-semantictable.html
    pub struct SemanticTable_ {
        pub alias: crate::value::ExpString,
        pub destination_table_id: crate::value::ExpString,
        pub row_level_permission_configuration: Option<Box<RowLevelPermissionConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_SemanticTable {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.SemanticTable"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_SemanticTable as SemanticTable;
    impl crate::value::ToValue for SemanticTable_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "DestinationTableId".to_string(),
                crate::value::ToValue::to_value(&self.destination_table_id),
            );
            if let Some(ref value) = self.row_level_permission_configuration {
                properties.insert(
                    "RowLevelPermissionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-sourcetable.html
    pub struct SourceTable_ {
        pub data_set: Option<Box<ParentDataSet_>>,
        pub physical_table_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_SourceTable {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.SourceTable"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_SourceTable as SourceTable;
    impl crate::value::ToValue for SourceTable_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_set {
                properties.insert(
                    "DataSet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.physical_table_id {
                properties.insert(
                    "PhysicalTableId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-stringdatasetparameter.html
    pub struct StringDatasetParameter_ {
        pub default_values: Option<Box<StringDatasetParameterDefaultValues_>>,
        pub id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub value_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_StringDatasetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.StringDatasetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_StringDatasetParameter as StringDatasetParameter;
    impl crate::value::ToValue for StringDatasetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert("Id".to_string(), crate::value::ToValue::to_value(&self.id));
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ValueType".to_string(),
                crate::value::ToValue::to_value(&self.value_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-stringdatasetparameterdefaultvalues.html
    pub struct StringDatasetParameterDefaultValues_ {
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_StringDatasetParameterDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.StringDatasetParameterDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_StringDatasetParameterDefaultValues as StringDatasetParameterDefaultValues;
    impl crate::value::ToValue for StringDatasetParameterDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-tablepathelement.html
    pub struct TablePathElement_ {
        pub id: Option<crate::value::ExpString>,
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_TablePathElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.TablePathElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_TablePathElement as TablePathElement;
    impl crate::value::ToValue for TablePathElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.id {
                properties.insert("Id".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-transformoperationsource.html
    pub struct TransformOperationSource_ {
        pub column_id_mappings: Option<Vec<DataSetColumnIdMapping_>>,
        pub transform_operation_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_TransformOperationSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.TransformOperationSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_TransformOperationSource as TransformOperationSource;
    impl crate::value::ToValue for TransformOperationSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_id_mappings {
                properties.insert(
                    "ColumnIdMappings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TransformOperationId".to_string(),
                crate::value::ToValue::to_value(&self.transform_operation_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-transformstep.html
    pub struct TransformStep_ {
        pub aggregate_step: Option<Box<AggregateOperation_>>,
        pub append_step: Option<Box<AppendOperation_>>,
        pub cast_column_types_step: Option<Box<CastColumnTypesOperation_>>,
        pub create_columns_step: Option<Box<CreateColumnsOperation_>>,
        pub filters_step: Option<Box<FiltersOperation_>>,
        pub import_table_step: Option<Box<ImportTableOperation_>>,
        pub join_step: Option<Box<JoinOperation_>>,
        pub pivot_step: Option<Box<PivotOperation_>>,
        pub project_step: Option<Box<ProjectOperation_>>,
        pub rename_columns_step: Option<Box<RenameColumnsOperation_>>,
        pub unpivot_step: Option<Box<UnpivotOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_TransformStep {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.TransformStep"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_TransformStep as TransformStep;
    impl crate::value::ToValue for TransformStep_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregate_step {
                properties.insert(
                    "AggregateStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.append_step {
                properties.insert(
                    "AppendStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.cast_column_types_step {
                properties.insert(
                    "CastColumnTypesStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.create_columns_step {
                properties.insert(
                    "CreateColumnsStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filters_step {
                properties.insert(
                    "FiltersStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.import_table_step {
                properties.insert(
                    "ImportTableStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.join_step {
                properties.insert(
                    "JoinStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pivot_step {
                properties.insert(
                    "PivotStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.project_step {
                properties.insert(
                    "ProjectStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rename_columns_step {
                properties.insert(
                    "RenameColumnsStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unpivot_step {
                properties.insert(
                    "UnpivotStep".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-uniquekey.html
    pub struct UniqueKey_ {
        pub column_names: Vec<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_UniqueKey {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.UniqueKey"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_UniqueKey as UniqueKey;
    impl crate::value::ToValue for UniqueKey_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnNames".to_string(),
                crate::value::ToValue::to_value(&self.column_names),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-unpivotoperation.html
    pub struct UnpivotOperation_ {
        pub alias: crate::value::ExpString,
        pub columns_to_unpivot: Vec<ColumnToUnpivot_>,
        pub source: Box<TransformOperationSource_>,
        pub unpivoted_label_column_id: crate::value::ExpString,
        pub unpivoted_label_column_name: crate::value::ExpString,
        pub unpivoted_value_column_id: crate::value::ExpString,
        pub unpivoted_value_column_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_UnpivotOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.UnpivotOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_UnpivotOperation as UnpivotOperation;
    impl crate::value::ToValue for UnpivotOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Alias".to_string(),
                crate::value::ToValue::to_value(&self.alias),
            );
            properties.insert(
                "ColumnsToUnpivot".to_string(),
                crate::value::ToValue::to_value(&self.columns_to_unpivot),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            properties.insert(
                "UnpivotedLabelColumnId".to_string(),
                crate::value::ToValue::to_value(&self.unpivoted_label_column_id),
            );
            properties.insert(
                "UnpivotedLabelColumnName".to_string(),
                crate::value::ToValue::to_value(&self.unpivoted_label_column_name),
            );
            properties.insert(
                "UnpivotedValueColumnId".to_string(),
                crate::value::ToValue::to_value(&self.unpivoted_value_column_id),
            );
            properties.insert(
                "UnpivotedValueColumnName".to_string(),
                crate::value::ToValue::to_value(&self.unpivoted_value_column_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-uploadsettings.html
    pub struct UploadSettings_ {
        pub contains_header: Option<crate::value::ExpBool>,
        pub delimiter: Option<crate::value::ExpString>,
        pub format: Option<crate::value::ExpString>,
        pub start_from_row: Option<f64>,
        pub text_qualifier: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_UploadSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.UploadSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_UploadSettings as UploadSettings;
    impl crate::value::ToValue for UploadSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.contains_header {
                properties.insert(
                    "ContainsHeader".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.format {
                properties.insert("Format".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.start_from_row {
                properties.insert(
                    "StartFromRow".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_qualifier {
                properties.insert(
                    "TextQualifier".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-valuecolumnconfiguration.html
    pub struct ValueColumnConfiguration_ {
        pub aggregation_function: Option<Box<DataPrepAggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSet_ValueColumnConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSet.ValueColumnConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSet_ValueColumnConfiguration as ValueColumnConfiguration;
    impl crate::value::ToValue for ValueColumnConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
}
pub mod datasource {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-amazonelasticsearchparameters.html
    pub struct AmazonElasticsearchParameters_ {
        pub domain: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_AmazonElasticsearchParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.AmazonElasticsearchParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_AmazonElasticsearchParameters as AmazonElasticsearchParameters;
    impl crate::value::ToValue for AmazonElasticsearchParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Domain".to_string(),
                crate::value::ToValue::to_value(&self.domain),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-amazonopensearchparameters.html
    pub struct AmazonOpenSearchParameters_ {
        pub domain: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_AmazonOpenSearchParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.AmazonOpenSearchParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_AmazonOpenSearchParameters as AmazonOpenSearchParameters;
    impl crate::value::ToValue for AmazonOpenSearchParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Domain".to_string(),
                crate::value::ToValue::to_value(&self.domain),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-athenaparameters.html
    pub struct AthenaParameters_ {
        pub identity_center_configuration: Option<Box<IdentityCenterConfiguration_>>,
        pub role_arn: Option<crate::value::ExpString>,
        pub work_group: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_AthenaParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.AthenaParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_AthenaParameters as AthenaParameters;
    impl crate::value::ToValue for AthenaParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.identity_center_configuration {
                properties.insert(
                    "IdentityCenterConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.role_arn {
                properties.insert(
                    "RoleArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.work_group {
                properties.insert(
                    "WorkGroup".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-auroraparameters.html
    pub struct AuroraParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_AuroraParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.AuroraParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_AuroraParameters as AuroraParameters;
    impl crate::value::ToValue for AuroraParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-aurorapostgresqlparameters.html
    pub struct AuroraPostgreSqlParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_AuroraPostgreSqlParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.AuroraPostgreSqlParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_AuroraPostgreSqlParameters as AuroraPostgreSqlParameters;
    impl crate::value::ToValue for AuroraPostgreSqlParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-credentialpair.html
    pub struct CredentialPair_ {
        pub alternate_data_source_parameters: Option<Vec<DataSourceParameters_>>,
        pub password: crate::value::ExpString,
        pub username: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_CredentialPair {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.CredentialPair"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_CredentialPair as CredentialPair;
    impl crate::value::ToValue for CredentialPair_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alternate_data_source_parameters {
                properties.insert(
                    "AlternateDataSourceParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Password".to_string(),
                crate::value::ToValue::to_value(&self.password),
            );
            properties.insert(
                "Username".to_string(),
                crate::value::ToValue::to_value(&self.username),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-datasourcecredentials.html
    pub struct DataSourceCredentials_ {
        pub copy_source_arn: Option<crate::value::ExpString>,
        pub credential_pair: Option<Box<CredentialPair_>>,
        pub key_pair_credentials: Option<Box<KeyPairCredentials_>>,
        pub secret_arn: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_DataSourceCredentials {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.DataSourceCredentials"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_DataSourceCredentials as DataSourceCredentials;
    impl crate::value::ToValue for DataSourceCredentials_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.copy_source_arn {
                properties.insert(
                    "CopySourceArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.credential_pair {
                properties.insert(
                    "CredentialPair".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.key_pair_credentials {
                properties.insert(
                    "KeyPairCredentials".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secret_arn {
                properties.insert(
                    "SecretArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-datasourceerrorinfo.html
    pub struct DataSourceErrorInfo_ {
        pub message: Option<crate::value::ExpString>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_DataSourceErrorInfo {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.DataSourceErrorInfo"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_DataSourceErrorInfo as DataSourceErrorInfo;
    impl crate::value::ToValue for DataSourceErrorInfo_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.message {
                properties.insert(
                    "Message".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-datasourceparameters.html
    pub struct DataSourceParameters_ {
        pub amazon_elasticsearch_parameters: Option<Box<AmazonElasticsearchParameters_>>,
        pub amazon_open_search_parameters: Option<Box<AmazonOpenSearchParameters_>>,
        pub athena_parameters: Option<Box<AthenaParameters_>>,
        pub aurora_parameters: Option<Box<AuroraParameters_>>,
        pub aurora_postgre_sql_parameters: Option<Box<AuroraPostgreSqlParameters_>>,
        pub databricks_parameters: Option<Box<DatabricksParameters_>>,
        pub maria_db_parameters: Option<Box<MariaDbParameters_>>,
        pub my_sql_parameters: Option<Box<MySqlParameters_>>,
        pub oracle_parameters: Option<Box<OracleParameters_>>,
        pub postgre_sql_parameters: Option<Box<PostgreSqlParameters_>>,
        pub presto_parameters: Option<Box<PrestoParameters_>>,
        pub rds_parameters: Option<Box<RdsParameters_>>,
        pub redshift_parameters: Option<Box<RedshiftParameters_>>,
        pub s3_parameters: Option<Box<S3Parameters_>>,
        pub snowflake_parameters: Option<Box<SnowflakeParameters_>>,
        pub spark_parameters: Option<Box<SparkParameters_>>,
        pub sql_server_parameters: Option<Box<SqlServerParameters_>>,
        pub starburst_parameters: Option<Box<StarburstParameters_>>,
        pub teradata_parameters: Option<Box<TeradataParameters_>>,
        pub trino_parameters: Option<Box<TrinoParameters_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_DataSourceParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.DataSourceParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_DataSourceParameters as DataSourceParameters;
    impl crate::value::ToValue for DataSourceParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.amazon_elasticsearch_parameters {
                properties.insert(
                    "AmazonElasticsearchParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.amazon_open_search_parameters {
                properties.insert(
                    "AmazonOpenSearchParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.athena_parameters {
                properties.insert(
                    "AthenaParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.aurora_parameters {
                properties.insert(
                    "AuroraParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.aurora_postgre_sql_parameters {
                properties.insert(
                    "AuroraPostgreSqlParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.databricks_parameters {
                properties.insert(
                    "DatabricksParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maria_db_parameters {
                properties.insert(
                    "MariaDbParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.my_sql_parameters {
                properties.insert(
                    "MySqlParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.oracle_parameters {
                properties.insert(
                    "OracleParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.postgre_sql_parameters {
                properties.insert(
                    "PostgreSqlParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.presto_parameters {
                properties.insert(
                    "PrestoParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rds_parameters {
                properties.insert(
                    "RdsParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.redshift_parameters {
                properties.insert(
                    "RedshiftParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.s3_parameters {
                properties.insert(
                    "S3Parameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.snowflake_parameters {
                properties.insert(
                    "SnowflakeParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.spark_parameters {
                properties.insert(
                    "SparkParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sql_server_parameters {
                properties.insert(
                    "SqlServerParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.starburst_parameters {
                properties.insert(
                    "StarburstParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.teradata_parameters {
                properties.insert(
                    "TeradataParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trino_parameters {
                properties.insert(
                    "TrinoParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-databricksparameters.html
    pub struct DatabricksParameters_ {
        pub host: crate::value::ExpString,
        pub port: f64,
        pub sql_endpoint_path: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_DatabricksParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.DatabricksParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_DatabricksParameters as DatabricksParameters;
    impl crate::value::ToValue for DatabricksParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.insert(
                "SqlEndpointPath".to_string(),
                crate::value::ToValue::to_value(&self.sql_endpoint_path),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-identitycenterconfiguration.html
    pub struct IdentityCenterConfiguration_ {
        pub enable_identity_propagation: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_IdentityCenterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.IdentityCenterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_IdentityCenterConfiguration as IdentityCenterConfiguration;
    impl crate::value::ToValue for IdentityCenterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.enable_identity_propagation {
                properties.insert(
                    "EnableIdentityPropagation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-keypaircredentials.html
    pub struct KeyPairCredentials_ {
        pub key_pair_username: crate::value::ExpString,
        pub private_key: crate::value::ExpString,
        pub private_key_passphrase: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_KeyPairCredentials {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.KeyPairCredentials"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_KeyPairCredentials as KeyPairCredentials;
    impl crate::value::ToValue for KeyPairCredentials_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "KeyPairUsername".to_string(),
                crate::value::ToValue::to_value(&self.key_pair_username),
            );
            properties.insert(
                "PrivateKey".to_string(),
                crate::value::ToValue::to_value(&self.private_key),
            );
            if let Some(ref value) = self.private_key_passphrase {
                properties.insert(
                    "PrivateKeyPassphrase".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-manifestfilelocation.html
    pub struct ManifestFileLocation_ {
        pub bucket: crate::value::ExpString,
        pub key: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_ManifestFileLocation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.ManifestFileLocation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_ManifestFileLocation as ManifestFileLocation;
    impl crate::value::ToValue for ManifestFileLocation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Bucket".to_string(),
                crate::value::ToValue::to_value(&self.bucket),
            );
            properties.insert(
                "Key".to_string(),
                crate::value::ToValue::to_value(&self.key),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-mariadbparameters.html
    pub struct MariaDbParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_MariaDbParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.MariaDbParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_MariaDbParameters as MariaDbParameters;
    impl crate::value::ToValue for MariaDbParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-mysqlparameters.html
    pub struct MySqlParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_MySqlParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.MySqlParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_MySqlParameters as MySqlParameters;
    impl crate::value::ToValue for MySqlParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-oauthparameters.html
    pub struct OAuthParameters_ {
        pub identity_provider_resource_uri: Option<crate::value::ExpString>,
        pub identity_provider_vpc_connection_properties: Option<Box<VpcConnectionProperties_>>,
        pub o_auth_scope: Option<crate::value::ExpString>,
        pub token_provider_url: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_OAuthParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.OAuthParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_OAuthParameters as OAuthParameters;
    impl crate::value::ToValue for OAuthParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.identity_provider_resource_uri {
                properties.insert(
                    "IdentityProviderResourceUri".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.identity_provider_vpc_connection_properties {
                properties.insert(
                    "IdentityProviderVpcConnectionProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.o_auth_scope {
                properties.insert(
                    "OAuthScope".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TokenProviderUrl".to_string(),
                crate::value::ToValue::to_value(&self.token_provider_url),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-oracleparameters.html
    pub struct OracleParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
        pub use_service_name: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_OracleParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.OracleParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_OracleParameters as OracleParameters;
    impl crate::value::ToValue for OracleParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            if let Some(ref value) = self.use_service_name {
                properties.insert(
                    "UseServiceName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-postgresqlparameters.html
    pub struct PostgreSqlParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_PostgreSqlParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.PostgreSqlParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_PostgreSqlParameters as PostgreSqlParameters;
    impl crate::value::ToValue for PostgreSqlParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-prestoparameters.html
    pub struct PrestoParameters_ {
        pub catalog: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_PrestoParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.PrestoParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_PrestoParameters as PrestoParameters;
    impl crate::value::ToValue for PrestoParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Catalog".to_string(),
                crate::value::ToValue::to_value(&self.catalog),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-rdsparameters.html
    pub struct RdsParameters_ {
        pub database: crate::value::ExpString,
        pub instance_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_RdsParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.RdsParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_RdsParameters as RdsParameters;
    impl crate::value::ToValue for RdsParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "InstanceId".to_string(),
                crate::value::ToValue::to_value(&self.instance_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-redshiftiamparameters.html
    pub struct RedshiftIAMParameters_ {
        pub auto_create_database_user: Option<crate::value::ExpBool>,
        pub database_groups: Option<Vec<crate::value::ExpString>>,
        pub database_user: Option<crate::value::ExpString>,
        pub role_arn: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_RedshiftIAMParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.RedshiftIAMParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_RedshiftIAMParameters as RedshiftIAMParameters;
    impl crate::value::ToValue for RedshiftIAMParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.auto_create_database_user {
                properties.insert(
                    "AutoCreateDatabaseUser".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.database_groups {
                properties.insert(
                    "DatabaseGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.database_user {
                properties.insert(
                    "DatabaseUser".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RoleArn".to_string(),
                crate::value::ToValue::to_value(&self.role_arn),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-redshiftparameters.html
    pub struct RedshiftParameters_ {
        pub cluster_id: Option<crate::value::ExpString>,
        pub database: crate::value::ExpString,
        pub host: Option<crate::value::ExpString>,
        pub iam_parameters: Option<Box<RedshiftIAMParameters_>>,
        pub identity_center_configuration: Option<Box<IdentityCenterConfiguration_>>,
        pub port: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_RedshiftParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.RedshiftParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_RedshiftParameters as RedshiftParameters;
    impl crate::value::ToValue for RedshiftParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_id {
                properties.insert(
                    "ClusterId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            if let Some(ref value) = self.host {
                properties.insert("Host".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.iam_parameters {
                properties.insert(
                    "IAMParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.identity_center_configuration {
                properties.insert(
                    "IdentityCenterConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.port {
                properties.insert("Port".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
        pub resource: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            if let Some(ref value) = self.resource {
                properties.insert(
                    "Resource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-s3parameters.html
    pub struct S3Parameters_ {
        pub manifest_file_location: Box<ManifestFileLocation_>,
        pub role_arn: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_S3Parameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.S3Parameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_S3Parameters as S3Parameters;
    impl crate::value::ToValue for S3Parameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ManifestFileLocation".to_string(),
                crate::value::ToValue::to_value(&self.manifest_file_location),
            );
            if let Some(ref value) = self.role_arn {
                properties.insert(
                    "RoleArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-snowflakeparameters.html
    pub struct SnowflakeParameters_ {
        pub authentication_type: Option<crate::value::ExpString>,
        pub database: crate::value::ExpString,
        pub database_access_control_role: Option<crate::value::ExpString>,
        pub host: crate::value::ExpString,
        pub o_auth_parameters: Option<Box<OAuthParameters_>>,
        pub warehouse: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_SnowflakeParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.SnowflakeParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_SnowflakeParameters as SnowflakeParameters;
    impl crate::value::ToValue for SnowflakeParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.authentication_type {
                properties.insert(
                    "AuthenticationType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            if let Some(ref value) = self.database_access_control_role {
                properties.insert(
                    "DatabaseAccessControlRole".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            if let Some(ref value) = self.o_auth_parameters {
                properties.insert(
                    "OAuthParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Warehouse".to_string(),
                crate::value::ToValue::to_value(&self.warehouse),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-sparkparameters.html
    pub struct SparkParameters_ {
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_SparkParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.SparkParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_SparkParameters as SparkParameters;
    impl crate::value::ToValue for SparkParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-sqlserverparameters.html
    pub struct SqlServerParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_SqlServerParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.SqlServerParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_SqlServerParameters as SqlServerParameters;
    impl crate::value::ToValue for SqlServerParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-sslproperties.html
    pub struct SslProperties_ {
        pub disable_ssl: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_SslProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.SslProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_SslProperties as SslProperties;
    impl crate::value::ToValue for SslProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.disable_ssl {
                properties.insert(
                    "DisableSsl".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-starburstparameters.html
    pub struct StarburstParameters_ {
        pub authentication_type: Option<crate::value::ExpString>,
        pub catalog: crate::value::ExpString,
        pub database_access_control_role: Option<crate::value::ExpString>,
        pub host: crate::value::ExpString,
        pub o_auth_parameters: Option<Box<OAuthParameters_>>,
        pub port: f64,
        pub product_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_StarburstParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.StarburstParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_StarburstParameters as StarburstParameters;
    impl crate::value::ToValue for StarburstParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.authentication_type {
                properties.insert(
                    "AuthenticationType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Catalog".to_string(),
                crate::value::ToValue::to_value(&self.catalog),
            );
            if let Some(ref value) = self.database_access_control_role {
                properties.insert(
                    "DatabaseAccessControlRole".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            if let Some(ref value) = self.o_auth_parameters {
                properties.insert(
                    "OAuthParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            if let Some(ref value) = self.product_type {
                properties.insert(
                    "ProductType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-teradataparameters.html
    pub struct TeradataParameters_ {
        pub database: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_TeradataParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.TeradataParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_TeradataParameters as TeradataParameters;
    impl crate::value::ToValue for TeradataParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Database".to_string(),
                crate::value::ToValue::to_value(&self.database),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-trinoparameters.html
    pub struct TrinoParameters_ {
        pub catalog: crate::value::ExpString,
        pub host: crate::value::ExpString,
        pub port: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_TrinoParameters {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.TrinoParameters"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_TrinoParameters as TrinoParameters;
    impl crate::value::ToValue for TrinoParameters_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Catalog".to_string(),
                crate::value::ToValue::to_value(&self.catalog),
            );
            properties.insert(
                "Host".to_string(),
                crate::value::ToValue::to_value(&self.host),
            );
            properties.insert(
                "Port".to_string(),
                crate::value::ToValue::to_value(&self.port),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-vpcconnectionproperties.html
    pub struct VpcConnectionProperties_ {
        pub vpc_connection_arn: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_DataSource_VpcConnectionProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::DataSource.VpcConnectionProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_DataSource_VpcConnectionProperties as VpcConnectionProperties;
    impl crate::value::ToValue for VpcConnectionProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "VpcConnectionArn".to_string(),
                crate::value::ToValue::to_value(&self.vpc_connection_arn),
            );
            properties.into()
        }
    }
}
pub mod folder {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-folder-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Folder_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Folder.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Folder_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
}
pub mod refreshschedule {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-refreshschedule-refreshonday.html
    pub struct RefreshOnDay_ {
        pub day_of_month: Option<crate::value::ExpString>,
        pub day_of_week: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_RefreshSchedule_RefreshOnDay {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::RefreshSchedule.RefreshOnDay"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_RefreshSchedule_RefreshOnDay as RefreshOnDay;
    impl crate::value::ToValue for RefreshOnDay_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.day_of_month {
                properties.insert(
                    "DayOfMonth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.day_of_week {
                properties.insert(
                    "DayOfWeek".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-refreshschedule-refreshschedulemap.html
    pub struct RefreshScheduleMap_ {
        pub refresh_type: Option<crate::value::ExpString>,
        pub schedule_frequency: Option<Box<ScheduleFrequency_>>,
        pub schedule_id: Option<crate::value::ExpString>,
        pub start_after_date_time: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_RefreshSchedule_RefreshScheduleMap {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::RefreshSchedule.RefreshScheduleMap"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_RefreshSchedule_RefreshScheduleMap as RefreshScheduleMap;
    impl crate::value::ToValue for RefreshScheduleMap_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.refresh_type {
                properties.insert(
                    "RefreshType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.schedule_frequency {
                properties.insert(
                    "ScheduleFrequency".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.schedule_id {
                properties.insert(
                    "ScheduleId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_after_date_time {
                properties.insert(
                    "StartAfterDateTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-refreshschedule-schedulefrequency.html
    pub struct ScheduleFrequency_ {
        pub interval: Option<crate::value::ExpString>,
        pub refresh_on_day: Option<Box<RefreshOnDay_>>,
        pub time_of_the_day: Option<crate::value::ExpString>,
        pub time_zone: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_RefreshSchedule_ScheduleFrequency {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::RefreshSchedule.ScheduleFrequency"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_RefreshSchedule_ScheduleFrequency as ScheduleFrequency;
    impl crate::value::ToValue for ScheduleFrequency_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.interval {
                properties.insert(
                    "Interval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.refresh_on_day {
                properties.insert(
                    "RefreshOnDay".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_of_the_day {
                properties.insert(
                    "TimeOfTheDay".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_zone {
                properties.insert(
                    "TimeZone".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
}
pub mod template {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-aggregationfunction.html
    pub struct AggregationFunction_ {
        pub attribute_aggregation_function: Option<Box<AttributeAggregationFunction_>>,
        pub categorical_aggregation_function: Option<crate::value::ExpString>,
        pub date_aggregation_function: Option<crate::value::ExpString>,
        pub numerical_aggregation_function: Option<Box<NumericalAggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AggregationFunction as AggregationFunction;
    impl crate::value::ToValue for AggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.attribute_aggregation_function {
                properties.insert(
                    "AttributeAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categorical_aggregation_function {
                properties.insert(
                    "CategoricalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_aggregation_function {
                properties.insert(
                    "DateAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_aggregation_function {
                properties.insert(
                    "NumericalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-aggregationsortconfiguration.html
    pub struct AggregationSortConfiguration_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub sort_direction: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AggregationSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AggregationSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AggregationSortConfiguration as AggregationSortConfiguration;
    impl crate::value::ToValue for AggregationSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "SortDirection".to_string(),
                crate::value::ToValue::to_value(&self.sort_direction),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-analysisdefaults.html
    pub struct AnalysisDefaults_ {
        pub default_new_sheet_configuration: Box<DefaultNewSheetConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AnalysisDefaults {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AnalysisDefaults"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AnalysisDefaults as AnalysisDefaults;
    impl crate::value::ToValue for AnalysisDefaults_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DefaultNewSheetConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.default_new_sheet_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-anchordateconfiguration.html
    pub struct AnchorDateConfiguration_ {
        pub anchor_option: Option<crate::value::ExpString>,
        pub parameter_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AnchorDateConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AnchorDateConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AnchorDateConfiguration as AnchorDateConfiguration;
    impl crate::value::ToValue for AnchorDateConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.anchor_option {
                properties.insert(
                    "AnchorOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-arcaxisconfiguration.html
    pub struct ArcAxisConfiguration_ {
        pub range: Option<Box<ArcAxisDisplayRange_>>,
        pub reserve_range: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ArcAxisConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ArcAxisConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ArcAxisConfiguration as ArcAxisConfiguration;
    impl crate::value::ToValue for ArcAxisConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.range {
                properties.insert("Range".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.reserve_range {
                properties.insert(
                    "ReserveRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-arcaxisdisplayrange.html
    pub struct ArcAxisDisplayRange_ {
        pub max: Option<f64>,
        pub min: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ArcAxisDisplayRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ArcAxisDisplayRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ArcAxisDisplayRange as ArcAxisDisplayRange;
    impl crate::value::ToValue for ArcAxisDisplayRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.max {
                properties.insert("Max".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.min {
                properties.insert("Min".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-arcconfiguration.html
    pub struct ArcConfiguration_ {
        pub arc_angle: Option<f64>,
        pub arc_thickness: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ArcConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ArcConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ArcConfiguration as ArcConfiguration;
    impl crate::value::ToValue for ArcConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_angle {
                properties.insert(
                    "ArcAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.arc_thickness {
                properties.insert(
                    "ArcThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-arcoptions.html
    pub struct ArcOptions_ {
        pub arc_thickness: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ArcOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ArcOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ArcOptions as ArcOptions;
    impl crate::value::ToValue for ArcOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_thickness {
                properties.insert(
                    "ArcThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-assetoptions.html
    pub struct AssetOptions_ {
        pub timezone: Option<crate::value::ExpString>,
        pub week_start: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AssetOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AssetOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AssetOptions as AssetOptions;
    impl crate::value::ToValue for AssetOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.timezone {
                properties.insert(
                    "Timezone".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.week_start {
                properties.insert(
                    "WeekStart".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-attributeaggregationfunction.html
    pub struct AttributeAggregationFunction_ {
        pub simple_attribute_aggregation: Option<crate::value::ExpString>,
        pub value_for_multiple_values: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AttributeAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AttributeAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AttributeAggregationFunction as AttributeAggregationFunction;
    impl crate::value::ToValue for AttributeAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_attribute_aggregation {
                properties.insert(
                    "SimpleAttributeAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_for_multiple_values {
                properties.insert(
                    "ValueForMultipleValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axisdataoptions.html
    pub struct AxisDataOptions_ {
        pub date_axis_options: Option<Box<DateAxisOptions_>>,
        pub numeric_axis_options: Option<Box<NumericAxisOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisDataOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisDataOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisDataOptions as AxisDataOptions;
    impl crate::value::ToValue for AxisDataOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_axis_options {
                properties.insert(
                    "DateAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_axis_options {
                properties.insert(
                    "NumericAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axisdisplayminmaxrange.html
    pub struct AxisDisplayMinMaxRange_ {
        pub maximum: Option<f64>,
        pub minimum: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisDisplayMinMaxRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisDisplayMinMaxRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisDisplayMinMaxRange as AxisDisplayMinMaxRange;
    impl crate::value::ToValue for AxisDisplayMinMaxRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.maximum {
                properties.insert(
                    "Maximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum {
                properties.insert(
                    "Minimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axisdisplayoptions.html
    pub struct AxisDisplayOptions_ {
        pub axis_line_visibility: Option<serde_json::Value>,
        pub axis_offset: Option<crate::value::ExpString>,
        pub data_options: Option<Box<AxisDataOptions_>>,
        pub grid_line_visibility: Option<serde_json::Value>,
        pub scrollbar_options: Option<Box<ScrollBarOptions_>>,
        pub tick_label_options: Option<Box<AxisTickLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisDisplayOptions as AxisDisplayOptions;
    impl crate::value::ToValue for AxisDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_line_visibility {
                properties.insert(
                    "AxisLineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.axis_offset {
                properties.insert(
                    "AxisOffset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_options {
                properties.insert(
                    "DataOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid_line_visibility {
                properties.insert(
                    "GridLineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scrollbar_options {
                properties.insert(
                    "ScrollbarOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tick_label_options {
                properties.insert(
                    "TickLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axisdisplayrange.html
    pub struct AxisDisplayRange_ {
        pub data_driven: Option<serde_json::Value>,
        pub min_max: Option<Box<AxisDisplayMinMaxRange_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisDisplayRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisDisplayRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisDisplayRange as AxisDisplayRange;
    impl crate::value::ToValue for AxisDisplayRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_driven {
                properties.insert(
                    "DataDriven".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.min_max {
                properties.insert("MinMax".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axislabeloptions.html
    pub struct AxisLabelOptions_ {
        pub apply_to: Option<Box<AxisLabelReferenceOptions_>>,
        pub custom_label: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisLabelOptions as AxisLabelOptions;
    impl crate::value::ToValue for AxisLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.apply_to {
                properties.insert(
                    "ApplyTo".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axislabelreferenceoptions.html
    pub struct AxisLabelReferenceOptions_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisLabelReferenceOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisLabelReferenceOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisLabelReferenceOptions as AxisLabelReferenceOptions;
    impl crate::value::ToValue for AxisLabelReferenceOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axislinearscale.html
    pub struct AxisLinearScale_ {
        pub step_count: Option<f64>,
        pub step_size: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisLinearScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisLinearScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisLinearScale as AxisLinearScale;
    impl crate::value::ToValue for AxisLinearScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.step_count {
                properties.insert(
                    "StepCount".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.step_size {
                properties.insert(
                    "StepSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axislogarithmicscale.html
    pub struct AxisLogarithmicScale_ {
        pub base: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisLogarithmicScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisLogarithmicScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisLogarithmicScale as AxisLogarithmicScale;
    impl crate::value::ToValue for AxisLogarithmicScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.base {
                properties.insert("Base".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axisscale.html
    pub struct AxisScale_ {
        pub linear: Option<Box<AxisLinearScale_>>,
        pub logarithmic: Option<Box<AxisLogarithmicScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisScale as AxisScale;
    impl crate::value::ToValue for AxisScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.linear {
                properties.insert("Linear".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.logarithmic {
                properties.insert(
                    "Logarithmic".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-axisticklabeloptions.html
    pub struct AxisTickLabelOptions_ {
        pub label_options: Option<Box<LabelOptions_>>,
        pub rotation_angle: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_AxisTickLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.AxisTickLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_AxisTickLabelOptions as AxisTickLabelOptions;
    impl crate::value::ToValue for AxisTickLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_options {
                properties.insert(
                    "LabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rotation_angle {
                properties.insert(
                    "RotationAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-barchartaggregatedfieldwells.html
    pub struct BarChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BarChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BarChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BarChartAggregatedFieldWells as BarChartAggregatedFieldWells;
    impl crate::value::ToValue for BarChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-barchartconfiguration.html
    pub struct BarChartConfiguration_ {
        pub bars_arrangement: Option<crate::value::ExpString>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<BarChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub orientation: Option<crate::value::ExpString>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<BarChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_axis: Option<Box<AxisDisplayOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BarChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BarChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BarChartConfiguration as BarChartConfiguration;
    impl crate::value::ToValue for BarChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bars_arrangement {
                properties.insert(
                    "BarsArrangement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.orientation {
                properties.insert(
                    "Orientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_axis {
                properties.insert(
                    "ValueAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-barchartfieldwells.html
    pub struct BarChartFieldWells_ {
        pub bar_chart_aggregated_field_wells: Option<Box<BarChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BarChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BarChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BarChartFieldWells as BarChartFieldWells;
    impl crate::value::ToValue for BarChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_chart_aggregated_field_wells {
                properties.insert(
                    "BarChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-barchartsortconfiguration.html
    pub struct BarChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BarChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BarChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BarChartSortConfiguration as BarChartSortConfiguration;
    impl crate::value::ToValue for BarChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-barchartvisual.html
    pub struct BarChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<BarChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BarChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BarChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BarChartVisual as BarChartVisual;
    impl crate::value::ToValue for BarChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bincountoptions.html
    pub struct BinCountOptions_ {
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BinCountOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BinCountOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BinCountOptions as BinCountOptions;
    impl crate::value::ToValue for BinCountOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-binwidthoptions.html
    pub struct BinWidthOptions_ {
        pub bin_count_limit: Option<f64>,
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BinWidthOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BinWidthOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BinWidthOptions as BinWidthOptions;
    impl crate::value::ToValue for BinWidthOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_count_limit {
                properties.insert(
                    "BinCountLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectionconfiguration.html
    pub struct BodySectionConfiguration_ {
        pub content: Box<BodySectionContent_>,
        pub page_break_configuration: Option<Box<SectionPageBreakConfiguration_>>,
        pub repeat_configuration: Option<Box<BodySectionRepeatConfiguration_>>,
        pub section_id: crate::value::ExpString,
        pub style: Option<Box<SectionStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionConfiguration as BodySectionConfiguration;
    impl crate::value::ToValue for BodySectionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Content".to_string(),
                crate::value::ToValue::to_value(&self.content),
            );
            if let Some(ref value) = self.page_break_configuration {
                properties.insert(
                    "PageBreakConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.repeat_configuration {
                properties.insert(
                    "RepeatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SectionId".to_string(),
                crate::value::ToValue::to_value(&self.section_id),
            );
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectioncontent.html
    pub struct BodySectionContent_ {
        pub layout: Option<Box<SectionLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionContent as BodySectionContent;
    impl crate::value::ToValue for BodySectionContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.layout {
                properties.insert("Layout".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectiondynamiccategorydimensionconfiguration.html
    pub struct BodySectionDynamicCategoryDimensionConfiguration_ {
        pub column: Box<ColumnIdentifier_>,
        pub limit: Option<f64>,
        pub sort_by_metrics: Option<Vec<ColumnSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionDynamicCategoryDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionDynamicCategoryDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionDynamicCategoryDimensionConfiguration as BodySectionDynamicCategoryDimensionConfiguration;
    impl crate::value::ToValue for BodySectionDynamicCategoryDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_by_metrics {
                properties.insert(
                    "SortByMetrics".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectiondynamicnumericdimensionconfiguration.html
    pub struct BodySectionDynamicNumericDimensionConfiguration_ {
        pub column: Box<ColumnIdentifier_>,
        pub limit: Option<f64>,
        pub sort_by_metrics: Option<Vec<ColumnSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionDynamicNumericDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionDynamicNumericDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionDynamicNumericDimensionConfiguration as BodySectionDynamicNumericDimensionConfiguration;
    impl crate::value::ToValue for BodySectionDynamicNumericDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_by_metrics {
                properties.insert(
                    "SortByMetrics".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectionrepeatconfiguration.html
    pub struct BodySectionRepeatConfiguration_ {
        pub dimension_configurations: Option<Vec<BodySectionRepeatDimensionConfiguration_>>,
        pub non_repeating_visuals: Option<Vec<crate::value::ExpString>>,
        pub page_break_configuration: Option<Box<BodySectionRepeatPageBreakConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionRepeatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionRepeatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionRepeatConfiguration as BodySectionRepeatConfiguration;
    impl crate::value::ToValue for BodySectionRepeatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dimension_configurations {
                properties.insert(
                    "DimensionConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.non_repeating_visuals {
                properties.insert(
                    "NonRepeatingVisuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.page_break_configuration {
                properties.insert(
                    "PageBreakConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectionrepeatdimensionconfiguration.html
    pub struct BodySectionRepeatDimensionConfiguration_ {
        pub dynamic_category_dimension_configuration:
            Option<Box<BodySectionDynamicCategoryDimensionConfiguration_>>,
        pub dynamic_numeric_dimension_configuration:
            Option<Box<BodySectionDynamicNumericDimensionConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionRepeatDimensionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionRepeatDimensionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionRepeatDimensionConfiguration as BodySectionRepeatDimensionConfiguration;
    impl crate::value::ToValue for BodySectionRepeatDimensionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_category_dimension_configuration {
                properties.insert(
                    "DynamicCategoryDimensionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dynamic_numeric_dimension_configuration {
                properties.insert(
                    "DynamicNumericDimensionConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-bodysectionrepeatpagebreakconfiguration.html
    pub struct BodySectionRepeatPageBreakConfiguration_ {
        pub after: Option<Box<SectionAfterPageBreak_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BodySectionRepeatPageBreakConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BodySectionRepeatPageBreakConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BodySectionRepeatPageBreakConfiguration as BodySectionRepeatPageBreakConfiguration;
    impl crate::value::ToValue for BodySectionRepeatPageBreakConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.after {
                properties.insert("After".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotaggregatedfieldwells.html
    pub struct BoxPlotAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotAggregatedFieldWells as BoxPlotAggregatedFieldWells;
    impl crate::value::ToValue for BoxPlotAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotchartconfiguration.html
    pub struct BoxPlotChartConfiguration_ {
        pub box_plot_options: Option<Box<BoxPlotOptions_>>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<BoxPlotFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub sort_configuration: Option<Box<BoxPlotSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotChartConfiguration as BoxPlotChartConfiguration;
    impl crate::value::ToValue for BoxPlotChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.box_plot_options {
                properties.insert(
                    "BoxPlotOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotfieldwells.html
    pub struct BoxPlotFieldWells_ {
        pub box_plot_aggregated_field_wells: Option<Box<BoxPlotAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotFieldWells as BoxPlotFieldWells;
    impl crate::value::ToValue for BoxPlotFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.box_plot_aggregated_field_wells {
                properties.insert(
                    "BoxPlotAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotoptions.html
    pub struct BoxPlotOptions_ {
        pub all_data_points_visibility: Option<serde_json::Value>,
        pub outlier_visibility: Option<serde_json::Value>,
        pub style_options: Option<Box<BoxPlotStyleOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotOptions as BoxPlotOptions;
    impl crate::value::ToValue for BoxPlotOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.all_data_points_visibility {
                properties.insert(
                    "AllDataPointsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.outlier_visibility {
                properties.insert(
                    "OutlierVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.style_options {
                properties.insert(
                    "StyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotsortconfiguration.html
    pub struct BoxPlotSortConfiguration_ {
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub pagination_configuration: Option<Box<PaginationConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotSortConfiguration as BoxPlotSortConfiguration;
    impl crate::value::ToValue for BoxPlotSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pagination_configuration {
                properties.insert(
                    "PaginationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotstyleoptions.html
    pub struct BoxPlotStyleOptions_ {
        pub fill_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotStyleOptions as BoxPlotStyleOptions;
    impl crate::value::ToValue for BoxPlotStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.fill_style {
                properties.insert(
                    "FillStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-boxplotvisual.html
    pub struct BoxPlotVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<BoxPlotChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_BoxPlotVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.BoxPlotVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_BoxPlotVisual as BoxPlotVisual;
    impl crate::value::ToValue for BoxPlotVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-calculatedfield.html
    pub struct CalculatedField_ {
        pub data_set_identifier: crate::value::ExpString,
        pub expression: crate::value::ExpString,
        pub name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CalculatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CalculatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CalculatedField as CalculatedField;
    impl crate::value::ToValue for CalculatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-calculatedmeasurefield.html
    pub struct CalculatedMeasureField_ {
        pub expression: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CalculatedMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CalculatedMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CalculatedMeasureField as CalculatedMeasureField;
    impl crate::value::ToValue for CalculatedMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-cascadingcontrolconfiguration.html
    pub struct CascadingControlConfiguration_ {
        pub source_controls: Option<Vec<CascadingControlSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CascadingControlConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CascadingControlConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CascadingControlConfiguration as CascadingControlConfiguration;
    impl crate::value::ToValue for CascadingControlConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source_controls {
                properties.insert(
                    "SourceControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-cascadingcontrolsource.html
    pub struct CascadingControlSource_ {
        pub column_to_match: Option<Box<ColumnIdentifier_>>,
        pub source_sheet_control_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CascadingControlSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CascadingControlSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CascadingControlSource as CascadingControlSource;
    impl crate::value::ToValue for CascadingControlSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_to_match {
                properties.insert(
                    "ColumnToMatch".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_sheet_control_id {
                properties.insert(
                    "SourceSheetControlId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-categoricaldimensionfield.html
    pub struct CategoricalDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<StringFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CategoricalDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CategoricalDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CategoricalDimensionField as CategoricalDimensionField;
    impl crate::value::ToValue for CategoricalDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-categoricalmeasurefield.html
    pub struct CategoricalMeasureField_ {
        pub aggregation_function: Option<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<StringFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CategoricalMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CategoricalMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CategoricalMeasureField as CategoricalMeasureField;
    impl crate::value::ToValue for CategoricalMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-categorydrilldownfilter.html
    pub struct CategoryDrillDownFilter_ {
        pub category_values: Vec<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CategoryDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CategoryDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CategoryDrillDownFilter as CategoryDrillDownFilter;
    impl crate::value::ToValue for CategoryDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CategoryValues".to_string(),
                crate::value::ToValue::to_value(&self.category_values),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-categoryfilter.html
    pub struct CategoryFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub configuration: Box<CategoryFilterConfiguration_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CategoryFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CategoryFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CategoryFilter as CategoryFilter;
    impl crate::value::ToValue for CategoryFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-categoryfilterconfiguration.html
    pub struct CategoryFilterConfiguration_ {
        pub custom_filter_configuration: Option<Box<CustomFilterConfiguration_>>,
        pub custom_filter_list_configuration: Option<Box<CustomFilterListConfiguration_>>,
        pub filter_list_configuration: Option<Box<FilterListConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CategoryFilterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CategoryFilterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CategoryFilterConfiguration as CategoryFilterConfiguration;
    impl crate::value::ToValue for CategoryFilterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_filter_configuration {
                properties.insert(
                    "CustomFilterConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_filter_list_configuration {
                properties.insert(
                    "CustomFilterListConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_list_configuration {
                properties.insert(
                    "FilterListConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-categoryinnerfilter.html
    pub struct CategoryInnerFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub configuration: Box<CategoryFilterConfiguration_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CategoryInnerFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CategoryInnerFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CategoryInnerFilter as CategoryInnerFilter;
    impl crate::value::ToValue for CategoryInnerFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-chartaxislabeloptions.html
    pub struct ChartAxisLabelOptions_ {
        pub axis_label_options: Option<Vec<AxisLabelOptions_>>,
        pub sort_icon_visibility: Option<serde_json::Value>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ChartAxisLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ChartAxisLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ChartAxisLabelOptions as ChartAxisLabelOptions;
    impl crate::value::ToValue for ChartAxisLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_label_options {
                properties.insert(
                    "AxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_icon_visibility {
                properties.insert(
                    "SortIconVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-clustermarker.html
    pub struct ClusterMarker_ {
        pub simple_cluster_marker: Option<Box<SimpleClusterMarker_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ClusterMarker {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ClusterMarker"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ClusterMarker as ClusterMarker;
    impl crate::value::ToValue for ClusterMarker_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_cluster_marker {
                properties.insert(
                    "SimpleClusterMarker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-clustermarkerconfiguration.html
    pub struct ClusterMarkerConfiguration_ {
        pub cluster_marker: Option<Box<ClusterMarker_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ClusterMarkerConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ClusterMarkerConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ClusterMarkerConfiguration as ClusterMarkerConfiguration;
    impl crate::value::ToValue for ClusterMarkerConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_marker {
                properties.insert(
                    "ClusterMarker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-colorscale.html
    pub struct ColorScale_ {
        pub color_fill_type: crate::value::ExpString,
        pub colors: Vec<DataColor_>,
        pub null_value_color: Option<Box<DataColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColorScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColorScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColorScale as ColorScale;
    impl crate::value::ToValue for ColorScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColorFillType".to_string(),
                crate::value::ToValue::to_value(&self.color_fill_type),
            );
            properties.insert(
                "Colors".to_string(),
                crate::value::ToValue::to_value(&self.colors),
            );
            if let Some(ref value) = self.null_value_color {
                properties.insert(
                    "NullValueColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-colorsconfiguration.html
    pub struct ColorsConfiguration_ {
        pub custom_colors: Option<Vec<CustomColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColorsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColorsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColorsConfiguration as ColorsConfiguration;
    impl crate::value::ToValue for ColorsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_colors {
                properties.insert(
                    "CustomColors".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnconfiguration.html
    pub struct ColumnConfiguration_ {
        pub colors_configuration: Option<Box<ColorsConfiguration_>>,
        pub column: Box<ColumnIdentifier_>,
        pub format_configuration: Option<Box<FormatConfiguration_>>,
        pub role: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnConfiguration as ColumnConfiguration;
    impl crate::value::ToValue for ColumnConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors_configuration {
                properties.insert(
                    "ColorsConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.role {
                properties.insert("Role".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupcolumnschema.html
    pub struct ColumnGroupColumnSchema_ {
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnGroupColumnSchema {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnGroupColumnSchema"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnGroupColumnSchema as ColumnGroupColumnSchema;
    impl crate::value::ToValue for ColumnGroupColumnSchema_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupschema.html
    pub struct ColumnGroupSchema_ {
        pub column_group_column_schema_list: Option<Vec<ColumnGroupColumnSchema_>>,
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnGroupSchema {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnGroupSchema"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnGroupSchema as ColumnGroupSchema;
    impl crate::value::ToValue for ColumnGroupSchema_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_group_column_schema_list {
                properties.insert(
                    "ColumnGroupColumnSchemaList".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnhierarchy.html
    pub struct ColumnHierarchy_ {
        pub date_time_hierarchy: Option<Box<DateTimeHierarchy_>>,
        pub explicit_hierarchy: Option<Box<ExplicitHierarchy_>>,
        pub predefined_hierarchy: Option<Box<PredefinedHierarchy_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnHierarchy as ColumnHierarchy;
    impl crate::value::ToValue for ColumnHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_hierarchy {
                properties.insert(
                    "DateTimeHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.explicit_hierarchy {
                properties.insert(
                    "ExplicitHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.predefined_hierarchy {
                properties.insert(
                    "PredefinedHierarchy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnidentifier.html
    pub struct ColumnIdentifier_ {
        pub column_name: crate::value::ExpString,
        pub data_set_identifier: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnIdentifier {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnIdentifier"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnIdentifier as ColumnIdentifier;
    impl crate::value::ToValue for ColumnIdentifier_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnschema.html
    pub struct ColumnSchema_ {
        pub data_type: Option<crate::value::ExpString>,
        pub geographic_role: Option<crate::value::ExpString>,
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnSchema {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnSchema"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnSchema as ColumnSchema;
    impl crate::value::ToValue for ColumnSchema_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_type {
                properties.insert(
                    "DataType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.geographic_role {
                properties.insert(
                    "GeographicRole".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnsort.html
    pub struct ColumnSort_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub direction: crate::value::ExpString,
        pub sort_by: Box<ColumnIdentifier_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnSort as ColumnSort;
    impl crate::value::ToValue for ColumnSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "SortBy".to_string(),
                crate::value::ToValue::to_value(&self.sort_by),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columntooltipitem.html
    pub struct ColumnTooltipItem_ {
        pub aggregation: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub label: Option<crate::value::ExpString>,
        pub tooltip_target: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ColumnTooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ColumnTooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ColumnTooltipItem as ColumnTooltipItem;
    impl crate::value::ToValue for ColumnTooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_target {
                properties.insert(
                    "TooltipTarget".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-combochartaggregatedfieldwells.html
    pub struct ComboChartAggregatedFieldWells_ {
        pub bar_values: Option<Vec<MeasureField_>>,
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub line_values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComboChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComboChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComboChartAggregatedFieldWells as ComboChartAggregatedFieldWells;
    impl crate::value::ToValue for ComboChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_values {
                properties.insert(
                    "BarValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.line_values {
                properties.insert(
                    "LineValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-combochartconfiguration.html
    pub struct ComboChartConfiguration_ {
        pub bar_data_labels: Option<Box<DataLabelOptions_>>,
        pub bars_arrangement: Option<crate::value::ExpString>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<ComboChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub line_data_labels: Option<Box<DataLabelOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub secondary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub secondary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub single_axis_options: Option<Box<SingleAxisOptions_>>,
        pub sort_configuration: Option<Box<ComboChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComboChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComboChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComboChartConfiguration as ComboChartConfiguration;
    impl crate::value::ToValue for ComboChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_data_labels {
                properties.insert(
                    "BarDataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.bars_arrangement {
                properties.insert(
                    "BarsArrangement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.line_data_labels {
                properties.insert(
                    "LineDataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_display_options {
                properties.insert(
                    "SecondaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_label_options {
                properties.insert(
                    "SecondaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.single_axis_options {
                properties.insert(
                    "SingleAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-combochartfieldwells.html
    pub struct ComboChartFieldWells_ {
        pub combo_chart_aggregated_field_wells: Option<Box<ComboChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComboChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComboChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComboChartFieldWells as ComboChartFieldWells;
    impl crate::value::ToValue for ComboChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.combo_chart_aggregated_field_wells {
                properties.insert(
                    "ComboChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-combochartsortconfiguration.html
    pub struct ComboChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComboChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComboChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComboChartSortConfiguration as ComboChartSortConfiguration;
    impl crate::value::ToValue for ComboChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-combochartvisual.html
    pub struct ComboChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<ComboChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComboChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComboChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComboChartVisual as ComboChartVisual;
    impl crate::value::ToValue for ComboChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-comparisonconfiguration.html
    pub struct ComparisonConfiguration_ {
        pub comparison_format: Option<Box<ComparisonFormatConfiguration_>>,
        pub comparison_method: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComparisonConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComparisonConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComparisonConfiguration as ComparisonConfiguration;
    impl crate::value::ToValue for ComparisonConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.comparison_format {
                properties.insert(
                    "ComparisonFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_method {
                properties.insert(
                    "ComparisonMethod".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-comparisonformatconfiguration.html
    pub struct ComparisonFormatConfiguration_ {
        pub number_display_format_configuration: Option<Box<NumberDisplayFormatConfiguration_>>,
        pub percentage_display_format_configuration:
            Option<Box<PercentageDisplayFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ComparisonFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ComparisonFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ComparisonFormatConfiguration as ComparisonFormatConfiguration;
    impl crate::value::ToValue for ComparisonFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.number_display_format_configuration {
                properties.insert(
                    "NumberDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentage_display_format_configuration {
                properties.insert(
                    "PercentageDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-computation.html
    pub struct Computation_ {
        pub forecast: Option<Box<ForecastComputation_>>,
        pub growth_rate: Option<Box<GrowthRateComputation_>>,
        pub maximum_minimum: Option<Box<MaximumMinimumComputation_>>,
        pub metric_comparison: Option<Box<MetricComparisonComputation_>>,
        pub period_over_period: Option<Box<PeriodOverPeriodComputation_>>,
        pub period_to_date: Option<Box<PeriodToDateComputation_>>,
        pub top_bottom_movers: Option<Box<TopBottomMoversComputation_>>,
        pub top_bottom_ranked: Option<Box<TopBottomRankedComputation_>>,
        pub total_aggregation: Option<Box<TotalAggregationComputation_>>,
        pub unique_values: Option<Box<UniqueValuesComputation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Computation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Computation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Computation as Computation;
    impl crate::value::ToValue for Computation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.forecast {
                properties.insert(
                    "Forecast".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.growth_rate {
                properties.insert(
                    "GrowthRate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_minimum {
                properties.insert(
                    "MaximumMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_comparison {
                properties.insert(
                    "MetricComparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.period_over_period {
                properties.insert(
                    "PeriodOverPeriod".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.period_to_date {
                properties.insert(
                    "PeriodToDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_movers {
                properties.insert(
                    "TopBottomMovers".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_ranked {
                properties.insert(
                    "TopBottomRanked".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation {
                properties.insert(
                    "TotalAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unique_values {
                properties.insert(
                    "UniqueValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingcolor.html
    pub struct ConditionalFormattingColor_ {
        pub gradient: Option<Box<ConditionalFormattingGradientColor_>>,
        pub solid: Option<Box<ConditionalFormattingSolidColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingColor as ConditionalFormattingColor;
    impl crate::value::ToValue for ConditionalFormattingColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.gradient {
                properties.insert(
                    "Gradient".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.solid {
                properties.insert("Solid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingcustomiconcondition.html
    pub struct ConditionalFormattingCustomIconCondition_ {
        pub color: Option<crate::value::ExpString>,
        pub display_configuration: Option<Box<ConditionalFormattingIconDisplayConfiguration_>>,
        pub expression: crate::value::ExpString,
        pub icon_options: Box<ConditionalFormattingCustomIconOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingCustomIconCondition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingCustomIconCondition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingCustomIconCondition as ConditionalFormattingCustomIconCondition;
    impl crate::value::ToValue for ConditionalFormattingCustomIconCondition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.display_configuration {
                properties.insert(
                    "DisplayConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.insert(
                "IconOptions".to_string(),
                crate::value::ToValue::to_value(&self.icon_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingcustomiconoptions.html
    pub struct ConditionalFormattingCustomIconOptions_ {
        pub icon: Option<crate::value::ExpString>,
        pub unicode_icon: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingCustomIconOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingCustomIconOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingCustomIconOptions as ConditionalFormattingCustomIconOptions;
    impl crate::value::ToValue for ConditionalFormattingCustomIconOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.unicode_icon {
                properties.insert(
                    "UnicodeIcon".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattinggradientcolor.html
    pub struct ConditionalFormattingGradientColor_ {
        pub color: Box<GradientColor_>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingGradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingGradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingGradientColor as ConditionalFormattingGradientColor;
    impl crate::value::ToValue for ConditionalFormattingGradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingicon.html
    pub struct ConditionalFormattingIcon_ {
        pub custom_condition: Option<Box<ConditionalFormattingCustomIconCondition_>>,
        pub icon_set: Option<Box<ConditionalFormattingIconSet_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingIcon {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingIcon"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingIcon as ConditionalFormattingIcon;
    impl crate::value::ToValue for ConditionalFormattingIcon_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_condition {
                properties.insert(
                    "CustomCondition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.icon_set {
                properties.insert(
                    "IconSet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingicondisplayconfiguration.html
    pub struct ConditionalFormattingIconDisplayConfiguration_ {
        pub icon_display_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingIconDisplayConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingIconDisplayConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingIconDisplayConfiguration as ConditionalFormattingIconDisplayConfiguration;
    impl crate::value::ToValue for ConditionalFormattingIconDisplayConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon_display_option {
                properties.insert(
                    "IconDisplayOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingiconset.html
    pub struct ConditionalFormattingIconSet_ {
        pub expression: crate::value::ExpString,
        pub icon_set_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingIconSet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingIconSet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingIconSet as ConditionalFormattingIconSet;
    impl crate::value::ToValue for ConditionalFormattingIconSet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            if let Some(ref value) = self.icon_set_type {
                properties.insert(
                    "IconSetType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-conditionalformattingsolidcolor.html
    pub struct ConditionalFormattingSolidColor_ {
        pub color: Option<crate::value::ExpString>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ConditionalFormattingSolidColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ConditionalFormattingSolidColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ConditionalFormattingSolidColor as ConditionalFormattingSolidColor;
    impl crate::value::ToValue for ConditionalFormattingSolidColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-contextmenuoption.html
    pub struct ContextMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ContextMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ContextMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ContextMenuOption as ContextMenuOption;
    impl crate::value::ToValue for ContextMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-contributionanalysisdefault.html
    pub struct ContributionAnalysisDefault_ {
        pub contributor_dimensions: Vec<ColumnIdentifier_>,
        pub measure_field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ContributionAnalysisDefault {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ContributionAnalysisDefault"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ContributionAnalysisDefault as ContributionAnalysisDefault;
    impl crate::value::ToValue for ContributionAnalysisDefault_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ContributorDimensions".to_string(),
                crate::value::ToValue::to_value(&self.contributor_dimensions),
            );
            properties.insert(
                "MeasureFieldId".to_string(),
                crate::value::ToValue::to_value(&self.measure_field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-currencydisplayformatconfiguration.html
    pub struct CurrencyDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub number_scale: Option<crate::value::ExpString>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
        pub symbol: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CurrencyDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CurrencyDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CurrencyDisplayFormatConfiguration as CurrencyDisplayFormatConfiguration;
    impl crate::value::ToValue for CurrencyDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_scale {
                properties.insert(
                    "NumberScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.symbol {
                properties.insert("Symbol".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customactionfilteroperation.html
    pub struct CustomActionFilterOperation_ {
        pub selected_fields_configuration: Box<FilterOperationSelectedFieldsConfiguration_>,
        pub target_visuals_configuration: Box<FilterOperationTargetVisualsConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomActionFilterOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomActionFilterOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomActionFilterOperation as CustomActionFilterOperation;
    impl crate::value::ToValue for CustomActionFilterOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "SelectedFieldsConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.selected_fields_configuration),
            );
            properties.insert(
                "TargetVisualsConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.target_visuals_configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customactionnavigationoperation.html
    pub struct CustomActionNavigationOperation_ {
        pub local_navigation_configuration: Option<Box<LocalNavigationConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomActionNavigationOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomActionNavigationOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomActionNavigationOperation as CustomActionNavigationOperation;
    impl crate::value::ToValue for CustomActionNavigationOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.local_navigation_configuration {
                properties.insert(
                    "LocalNavigationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customactionsetparametersoperation.html
    pub struct CustomActionSetParametersOperation_ {
        pub parameter_value_configurations: Vec<SetParameterValueConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomActionSetParametersOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomActionSetParametersOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomActionSetParametersOperation as CustomActionSetParametersOperation;
    impl crate::value::ToValue for CustomActionSetParametersOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ParameterValueConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_configurations),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customactionurloperation.html
    pub struct CustomActionURLOperation_ {
        pub url_target: crate::value::ExpString,
        pub url_template: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomActionURLOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomActionURLOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomActionURLOperation as CustomActionURLOperation;
    impl crate::value::ToValue for CustomActionURLOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "URLTarget".to_string(),
                crate::value::ToValue::to_value(&self.url_target),
            );
            properties.insert(
                "URLTemplate".to_string(),
                crate::value::ToValue::to_value(&self.url_template),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customcolor.html
    pub struct CustomColor_ {
        pub color: crate::value::ExpString,
        pub field_value: Option<crate::value::ExpString>,
        pub special_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomColor as CustomColor;
    impl crate::value::ToValue for CustomColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.special_value {
                properties.insert(
                    "SpecialValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customcontentconfiguration.html
    pub struct CustomContentConfiguration_ {
        pub content_type: Option<crate::value::ExpString>,
        pub content_url: Option<crate::value::ExpString>,
        pub image_scaling: Option<crate::value::ExpString>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomContentConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomContentConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomContentConfiguration as CustomContentConfiguration;
    impl crate::value::ToValue for CustomContentConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content_type {
                properties.insert(
                    "ContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.content_url {
                properties.insert(
                    "ContentUrl".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.image_scaling {
                properties.insert(
                    "ImageScaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customcontentvisual.html
    pub struct CustomContentVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<CustomContentConfiguration_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomContentVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomContentVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomContentVisual as CustomContentVisual;
    impl crate::value::ToValue for CustomContentVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customfilterconfiguration.html
    pub struct CustomFilterConfiguration_ {
        pub category_value: Option<crate::value::ExpString>,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomFilterConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomFilterConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomFilterConfiguration as CustomFilterConfiguration;
    impl crate::value::ToValue for CustomFilterConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_value {
                properties.insert(
                    "CategoryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customfilterlistconfiguration.html
    pub struct CustomFilterListConfiguration_ {
        pub category_values: Option<Vec<crate::value::ExpString>>,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomFilterListConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomFilterListConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomFilterListConfiguration as CustomFilterListConfiguration;
    impl crate::value::ToValue for CustomFilterListConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_values {
                properties.insert(
                    "CategoryValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customnarrativeoptions.html
    pub struct CustomNarrativeOptions_ {
        pub narrative: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomNarrativeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomNarrativeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomNarrativeOptions as CustomNarrativeOptions;
    impl crate::value::ToValue for CustomNarrativeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Narrative".to_string(),
                crate::value::ToValue::to_value(&self.narrative),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customparametervalues.html
    pub struct CustomParameterValues_ {
        pub date_time_values: Option<Vec<crate::value::ExpString>>,
        pub decimal_values: Option<Vec<f64>>,
        pub integer_values: Option<Vec<f64>>,
        pub string_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomParameterValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomParameterValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomParameterValues as CustomParameterValues;
    impl crate::value::ToValue for CustomParameterValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_values {
                properties.insert(
                    "DateTimeValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_values {
                properties.insert(
                    "DecimalValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_values {
                properties.insert(
                    "IntegerValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_values {
                properties.insert(
                    "StringValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-customvaluesconfiguration.html
    pub struct CustomValuesConfiguration_ {
        pub custom_values: Box<CustomParameterValues_>,
        pub include_null_value: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_CustomValuesConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.CustomValuesConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_CustomValuesConfiguration as CustomValuesConfiguration;
    impl crate::value::ToValue for CustomValuesConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomValues".to_string(),
                crate::value::ToValue::to_value(&self.custom_values),
            );
            if let Some(ref value) = self.include_null_value {
                properties.insert(
                    "IncludeNullValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-databarsoptions.html
    pub struct DataBarsOptions_ {
        pub field_id: crate::value::ExpString,
        pub negative_color: Option<crate::value::ExpString>,
        pub positive_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataBarsOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataBarsOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataBarsOptions as DataBarsOptions;
    impl crate::value::ToValue for DataBarsOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.negative_color {
                properties.insert(
                    "NegativeColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.positive_color {
                properties.insert(
                    "PositiveColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datacolor.html
    pub struct DataColor_ {
        pub color: Option<crate::value::ExpString>,
        pub data_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataColor as DataColor;
    impl crate::value::ToValue for DataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_value {
                properties.insert(
                    "DataValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datafieldseriesitem.html
    pub struct DataFieldSeriesItem_ {
        pub axis_binding: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
        pub field_value: Option<crate::value::ExpString>,
        pub settings: Option<Box<LineChartSeriesSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataFieldSeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataFieldSeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataFieldSeriesItem as DataFieldSeriesItem;
    impl crate::value::ToValue for DataFieldSeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AxisBinding".to_string(),
                crate::value::ToValue::to_value(&self.axis_binding),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.settings {
                properties.insert(
                    "Settings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datalabeloptions.html
    pub struct DataLabelOptions_ {
        pub category_label_visibility: Option<serde_json::Value>,
        pub data_label_types: Option<Vec<DataLabelType_>>,
        pub label_color: Option<crate::value::ExpString>,
        pub label_content: Option<crate::value::ExpString>,
        pub label_font_configuration: Option<Box<FontConfiguration_>>,
        pub measure_label_visibility: Option<serde_json::Value>,
        pub overlap: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub totals_visibility: Option<serde_json::Value>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataLabelOptions as DataLabelOptions;
    impl crate::value::ToValue for DataLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_visibility {
                properties.insert(
                    "CategoryLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_label_types {
                properties.insert(
                    "DataLabelTypes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_color {
                properties.insert(
                    "LabelColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_content {
                properties.insert(
                    "LabelContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_font_configuration {
                properties.insert(
                    "LabelFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_label_visibility {
                properties.insert(
                    "MeasureLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.overlap {
                properties.insert(
                    "Overlap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datalabeltype.html
    pub struct DataLabelType_ {
        pub data_path_label_type: Option<Box<DataPathLabelType_>>,
        pub field_label_type: Option<Box<FieldLabelType_>>,
        pub maximum_label_type: Option<Box<MaximumLabelType_>>,
        pub minimum_label_type: Option<Box<MinimumLabelType_>>,
        pub range_ends_label_type: Option<Box<RangeEndsLabelType_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataLabelType as DataLabelType;
    impl crate::value::ToValue for DataLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_path_label_type {
                properties.insert(
                    "DataPathLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_label_type {
                properties.insert(
                    "FieldLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_label_type {
                properties.insert(
                    "MaximumLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum_label_type {
                properties.insert(
                    "MinimumLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_ends_label_type {
                properties.insert(
                    "RangeEndsLabelType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datapathcolor.html
    pub struct DataPathColor_ {
        pub color: crate::value::ExpString,
        pub element: Box<DataPathValue_>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataPathColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataPathColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataPathColor as DataPathColor;
    impl crate::value::ToValue for DataPathColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.insert(
                "Element".to_string(),
                crate::value::ToValue::to_value(&self.element),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datapathlabeltype.html
    pub struct DataPathLabelType_ {
        pub field_id: Option<crate::value::ExpString>,
        pub field_value: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataPathLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataPathLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataPathLabelType as DataPathLabelType;
    impl crate::value::ToValue for DataPathLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datapathsort.html
    pub struct DataPathSort_ {
        pub direction: crate::value::ExpString,
        pub sort_paths: Vec<DataPathValue_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataPathSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataPathSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataPathSort as DataPathSort;
    impl crate::value::ToValue for DataPathSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "SortPaths".to_string(),
                crate::value::ToValue::to_value(&self.sort_paths),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datapathtype.html
    pub struct DataPathType_ {
        pub pivot_table_data_path_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataPathType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataPathType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataPathType as DataPathType;
    impl crate::value::ToValue for DataPathType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pivot_table_data_path_type {
                properties.insert(
                    "PivotTableDataPathType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datapathvalue.html
    pub struct DataPathValue_ {
        pub data_path_type: Option<Box<DataPathType_>>,
        pub field_id: Option<crate::value::ExpString>,
        pub field_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataPathValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataPathValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataPathValue as DataPathValue;
    impl crate::value::ToValue for DataPathValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_path_type {
                properties.insert(
                    "DataPathType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_value {
                properties.insert(
                    "FieldValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetconfiguration.html
    pub struct DataSetConfiguration_ {
        pub column_group_schema_list: Option<Vec<ColumnGroupSchema_>>,
        pub data_set_schema: Option<Box<DataSetSchema_>>,
        pub placeholder: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataSetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataSetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataSetConfiguration as DataSetConfiguration;
    impl crate::value::ToValue for DataSetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_group_schema_list {
                properties.insert(
                    "ColumnGroupSchemaList".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_set_schema {
                properties.insert(
                    "DataSetSchema".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder {
                properties.insert(
                    "Placeholder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetreference.html
    pub struct DataSetReference_ {
        pub data_set_arn: crate::value::ExpString,
        pub data_set_placeholder: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataSetReference {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataSetReference"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataSetReference as DataSetReference;
    impl crate::value::ToValue for DataSetReference_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetArn".to_string(),
                crate::value::ToValue::to_value(&self.data_set_arn),
            );
            properties.insert(
                "DataSetPlaceholder".to_string(),
                crate::value::ToValue::to_value(&self.data_set_placeholder),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetschema.html
    pub struct DataSetSchema_ {
        pub column_schema_list: Option<Vec<ColumnSchema_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DataSetSchema {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DataSetSchema"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DataSetSchema as DataSetSchema;
    impl crate::value::ToValue for DataSetSchema_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_schema_list {
                properties.insert(
                    "ColumnSchemaList".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-dateaxisoptions.html
    pub struct DateAxisOptions_ {
        pub missing_date_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateAxisOptions as DateAxisOptions;
    impl crate::value::ToValue for DateAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.missing_date_visibility {
                properties.insert(
                    "MissingDateVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datedimensionfield.html
    pub struct DateDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub date_granularity: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateDimensionField as DateDimensionField;
    impl crate::value::ToValue for DateDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.date_granularity {
                properties.insert(
                    "DateGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datemeasurefield.html
    pub struct DateMeasureField_ {
        pub aggregation_function: Option<crate::value::ExpString>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateMeasureField as DateMeasureField;
    impl crate::value::ToValue for DateMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datetimedefaultvalues.html
    pub struct DateTimeDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateTimeDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateTimeDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateTimeDefaultValues as DateTimeDefaultValues;
    impl crate::value::ToValue for DateTimeDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datetimeformatconfiguration.html
    pub struct DateTimeFormatConfiguration_ {
        pub date_time_format: Option<crate::value::ExpString>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub numeric_format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateTimeFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateTimeFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateTimeFormatConfiguration as DateTimeFormatConfiguration;
    impl crate::value::ToValue for DateTimeFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_format_configuration {
                properties.insert(
                    "NumericFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datetimehierarchy.html
    pub struct DateTimeHierarchy_ {
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateTimeHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateTimeHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateTimeHierarchy as DateTimeHierarchy;
    impl crate::value::ToValue for DateTimeHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datetimeparameterdeclaration.html
    pub struct DateTimeParameterDeclaration_ {
        pub default_values: Option<Box<DateTimeDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value_when_unset: Option<Box<DateTimeValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateTimeParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateTimeParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateTimeParameterDeclaration as DateTimeParameterDeclaration;
    impl crate::value::ToValue for DateTimeParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datetimepickercontroldisplayoptions.html
    pub struct DateTimePickerControlDisplayOptions_ {
        pub date_icon_visibility: Option<serde_json::Value>,
        pub date_time_format: Option<crate::value::ExpString>,
        pub helper_text_visibility: Option<serde_json::Value>,
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateTimePickerControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateTimePickerControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateTimePickerControlDisplayOptions as DateTimePickerControlDisplayOptions;
    impl crate::value::ToValue for DateTimePickerControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_icon_visibility {
                properties.insert(
                    "DateIconVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.helper_text_visibility {
                properties.insert(
                    "HelperTextVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datetimevaluewhenunsetconfiguration.html
    pub struct DateTimeValueWhenUnsetConfiguration_ {
        pub custom_value: Option<crate::value::ExpString>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DateTimeValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DateTimeValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DateTimeValueWhenUnsetConfiguration as DateTimeValueWhenUnsetConfiguration;
    impl crate::value::ToValue for DateTimeValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-decimaldefaultvalues.html
    pub struct DecimalDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DecimalDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DecimalDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DecimalDefaultValues as DecimalDefaultValues;
    impl crate::value::ToValue for DecimalDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-decimalparameterdeclaration.html
    pub struct DecimalParameterDeclaration_ {
        pub default_values: Option<Box<DecimalDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<DecimalValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DecimalParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DecimalParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DecimalParameterDeclaration as DecimalParameterDeclaration;
    impl crate::value::ToValue for DecimalParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-decimalplacesconfiguration.html
    pub struct DecimalPlacesConfiguration_ {
        pub decimal_places: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DecimalPlacesConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DecimalPlacesConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DecimalPlacesConfiguration as DecimalPlacesConfiguration;
    impl crate::value::ToValue for DecimalPlacesConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DecimalPlaces".to_string(),
                crate::value::ToValue::to_value(&self.decimal_places),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-decimalvaluewhenunsetconfiguration.html
    pub struct DecimalValueWhenUnsetConfiguration_ {
        pub custom_value: Option<f64>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DecimalValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DecimalValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DecimalValueWhenUnsetConfiguration as DecimalValueWhenUnsetConfiguration;
    impl crate::value::ToValue for DecimalValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultdatetimepickercontroloptions.html
    pub struct DefaultDateTimePickerControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultDateTimePickerControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultDateTimePickerControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultDateTimePickerControlOptions as DefaultDateTimePickerControlOptions;
    impl crate::value::ToValue for DefaultDateTimePickerControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultfiltercontrolconfiguration.html
    pub struct DefaultFilterControlConfiguration_ {
        pub control_options: Box<DefaultFilterControlOptions_>,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultFilterControlConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultFilterControlConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultFilterControlConfiguration as DefaultFilterControlConfiguration;
    impl crate::value::ToValue for DefaultFilterControlConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ControlOptions".to_string(),
                crate::value::ToValue::to_value(&self.control_options),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultfiltercontroloptions.html
    pub struct DefaultFilterControlOptions_ {
        pub default_date_time_picker_options: Option<Box<DefaultDateTimePickerControlOptions_>>,
        pub default_dropdown_options: Option<Box<DefaultFilterDropDownControlOptions_>>,
        pub default_list_options: Option<Box<DefaultFilterListControlOptions_>>,
        pub default_relative_date_time_options: Option<Box<DefaultRelativeDateTimeControlOptions_>>,
        pub default_slider_options: Option<Box<DefaultSliderControlOptions_>>,
        pub default_text_area_options: Option<Box<DefaultTextAreaControlOptions_>>,
        pub default_text_field_options: Option<Box<DefaultTextFieldControlOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultFilterControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultFilterControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultFilterControlOptions as DefaultFilterControlOptions;
    impl crate::value::ToValue for DefaultFilterControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_date_time_picker_options {
                properties.insert(
                    "DefaultDateTimePickerOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_dropdown_options {
                properties.insert(
                    "DefaultDropdownOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_list_options {
                properties.insert(
                    "DefaultListOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_relative_date_time_options {
                properties.insert(
                    "DefaultRelativeDateTimeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_slider_options {
                properties.insert(
                    "DefaultSliderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_text_area_options {
                properties.insert(
                    "DefaultTextAreaOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_text_field_options {
                properties.insert(
                    "DefaultTextFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultfilterdropdowncontroloptions.html
    pub struct DefaultFilterDropDownControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultFilterDropDownControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultFilterDropDownControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultFilterDropDownControlOptions as DefaultFilterDropDownControlOptions;
    impl crate::value::ToValue for DefaultFilterDropDownControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultfilterlistcontroloptions.html
    pub struct DefaultFilterListControlOptions_ {
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultFilterListControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultFilterListControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultFilterListControlOptions as DefaultFilterListControlOptions;
    impl crate::value::ToValue for DefaultFilterListControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultfreeformlayoutconfiguration.html
    pub struct DefaultFreeFormLayoutConfiguration_ {
        pub canvas_size_options: Box<FreeFormLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultFreeFormLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultFreeFormLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultFreeFormLayoutConfiguration as DefaultFreeFormLayoutConfiguration;
    impl crate::value::ToValue for DefaultFreeFormLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultgridlayoutconfiguration.html
    pub struct DefaultGridLayoutConfiguration_ {
        pub canvas_size_options: Box<GridLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultGridLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultGridLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultGridLayoutConfiguration as DefaultGridLayoutConfiguration;
    impl crate::value::ToValue for DefaultGridLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultinteractivelayoutconfiguration.html
    pub struct DefaultInteractiveLayoutConfiguration_ {
        pub free_form: Option<Box<DefaultFreeFormLayoutConfiguration_>>,
        pub grid: Option<Box<DefaultGridLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultInteractiveLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultInteractiveLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultInteractiveLayoutConfiguration as DefaultInteractiveLayoutConfiguration;
    impl crate::value::ToValue for DefaultInteractiveLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.free_form {
                properties.insert(
                    "FreeForm".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid {
                properties.insert("Grid".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultnewsheetconfiguration.html
    pub struct DefaultNewSheetConfiguration_ {
        pub interactive_layout_configuration: Option<Box<DefaultInteractiveLayoutConfiguration_>>,
        pub paginated_layout_configuration: Option<Box<DefaultPaginatedLayoutConfiguration_>>,
        pub sheet_content_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultNewSheetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultNewSheetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultNewSheetConfiguration as DefaultNewSheetConfiguration;
    impl crate::value::ToValue for DefaultNewSheetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.interactive_layout_configuration {
                properties.insert(
                    "InteractiveLayoutConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_layout_configuration {
                properties.insert(
                    "PaginatedLayoutConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_content_type {
                properties.insert(
                    "SheetContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultpaginatedlayoutconfiguration.html
    pub struct DefaultPaginatedLayoutConfiguration_ {
        pub section_based: Option<Box<DefaultSectionBasedLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultPaginatedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultPaginatedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultPaginatedLayoutConfiguration as DefaultPaginatedLayoutConfiguration;
    impl crate::value::ToValue for DefaultPaginatedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.section_based {
                properties.insert(
                    "SectionBased".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultrelativedatetimecontroloptions.html
    pub struct DefaultRelativeDateTimeControlOptions_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<RelativeDateTimeControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultRelativeDateTimeControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultRelativeDateTimeControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultRelativeDateTimeControlOptions as DefaultRelativeDateTimeControlOptions;
    impl crate::value::ToValue for DefaultRelativeDateTimeControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultsectionbasedlayoutconfiguration.html
    pub struct DefaultSectionBasedLayoutConfiguration_ {
        pub canvas_size_options: Box<SectionBasedLayoutCanvasSizeOptions_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultSectionBasedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultSectionBasedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultSectionBasedLayoutConfiguration as DefaultSectionBasedLayoutConfiguration;
    impl crate::value::ToValue for DefaultSectionBasedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaultslidercontroloptions.html
    pub struct DefaultSliderControlOptions_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub step_size: f64,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultSliderControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultSliderControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultSliderControlOptions as DefaultSliderControlOptions;
    impl crate::value::ToValue for DefaultSliderControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaulttextareacontroloptions.html
    pub struct DefaultTextAreaControlOptions_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultTextAreaControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultTextAreaControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultTextAreaControlOptions as DefaultTextAreaControlOptions;
    impl crate::value::ToValue for DefaultTextAreaControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-defaulttextfieldcontroloptions.html
    pub struct DefaultTextFieldControlOptions_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DefaultTextFieldControlOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DefaultTextFieldControlOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DefaultTextFieldControlOptions as DefaultTextFieldControlOptions;
    impl crate::value::ToValue for DefaultTextFieldControlOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-destinationparametervalueconfiguration.html
    pub struct DestinationParameterValueConfiguration_ {
        pub custom_values_configuration: Option<Box<CustomValuesConfiguration_>>,
        pub select_all_value_options: Option<crate::value::ExpString>,
        pub source_column: Option<Box<ColumnIdentifier_>>,
        pub source_field: Option<crate::value::ExpString>,
        pub source_parameter_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DestinationParameterValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DestinationParameterValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DestinationParameterValueConfiguration as DestinationParameterValueConfiguration;
    impl crate::value::ToValue for DestinationParameterValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_values_configuration {
                properties.insert(
                    "CustomValuesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_value_options {
                properties.insert(
                    "SelectAllValueOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_column {
                properties.insert(
                    "SourceColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_field {
                properties.insert(
                    "SourceField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_parameter_name {
                properties.insert(
                    "SourceParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-dimensionfield.html
    pub struct DimensionField_ {
        pub categorical_dimension_field: Option<Box<CategoricalDimensionField_>>,
        pub date_dimension_field: Option<Box<DateDimensionField_>>,
        pub numerical_dimension_field: Option<Box<NumericalDimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DimensionField as DimensionField;
    impl crate::value::ToValue for DimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.categorical_dimension_field {
                properties.insert(
                    "CategoricalDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_dimension_field {
                properties.insert(
                    "DateDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_dimension_field {
                properties.insert(
                    "NumericalDimensionField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-donutcenteroptions.html
    pub struct DonutCenterOptions_ {
        pub label_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DonutCenterOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DonutCenterOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DonutCenterOptions as DonutCenterOptions;
    impl crate::value::ToValue for DonutCenterOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.label_visibility {
                properties.insert(
                    "LabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-donutoptions.html
    pub struct DonutOptions_ {
        pub arc_options: Option<Box<ArcOptions_>>,
        pub donut_center_options: Option<Box<DonutCenterOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DonutOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DonutOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DonutOptions as DonutOptions;
    impl crate::value::ToValue for DonutOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc_options {
                properties.insert(
                    "ArcOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.donut_center_options {
                properties.insert(
                    "DonutCenterOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-drilldownfilter.html
    pub struct DrillDownFilter_ {
        pub category_filter: Option<Box<CategoryDrillDownFilter_>>,
        pub numeric_equality_filter: Option<Box<NumericEqualityDrillDownFilter_>>,
        pub time_range_filter: Option<Box<TimeRangeDrillDownFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DrillDownFilter as DrillDownFilter;
    impl crate::value::ToValue for DrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_range_filter {
                properties.insert(
                    "TimeRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-dropdowncontroldisplayoptions.html
    pub struct DropDownControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub select_all_options: Option<Box<ListControlSelectAllOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DropDownControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DropDownControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DropDownControlDisplayOptions as DropDownControlDisplayOptions;
    impl crate::value::ToValue for DropDownControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-dynamicdefaultvalue.html
    pub struct DynamicDefaultValue_ {
        pub default_value_column: Box<ColumnIdentifier_>,
        pub group_name_column: Option<Box<ColumnIdentifier_>>,
        pub user_name_column: Option<Box<ColumnIdentifier_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_DynamicDefaultValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.DynamicDefaultValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_DynamicDefaultValue as DynamicDefaultValue;
    impl crate::value::ToValue for DynamicDefaultValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DefaultValueColumn".to_string(),
                crate::value::ToValue::to_value(&self.default_value_column),
            );
            if let Some(ref value) = self.group_name_column {
                properties.insert(
                    "GroupNameColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.user_name_column {
                properties.insert(
                    "UserNameColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-emptyvisual.html
    pub struct EmptyVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_EmptyVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.EmptyVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_EmptyVisual as EmptyVisual;
    impl crate::value::ToValue for EmptyVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-entity.html
    pub struct Entity_ {
        pub path: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Entity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Entity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Entity as Entity;
    impl crate::value::ToValue for Entity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.path {
                properties.insert("Path".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-excludeperiodconfiguration.html
    pub struct ExcludePeriodConfiguration_ {
        pub amount: f64,
        pub granularity: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ExcludePeriodConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ExcludePeriodConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ExcludePeriodConfiguration as ExcludePeriodConfiguration;
    impl crate::value::ToValue for ExcludePeriodConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Amount".to_string(),
                crate::value::ToValue::to_value(&self.amount),
            );
            properties.insert(
                "Granularity".to_string(),
                crate::value::ToValue::to_value(&self.granularity),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-explicithierarchy.html
    pub struct ExplicitHierarchy_ {
        pub columns: Vec<ColumnIdentifier_>,
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ExplicitHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ExplicitHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ExplicitHierarchy as ExplicitHierarchy;
    impl crate::value::ToValue for ExplicitHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fieldbasedtooltip.html
    pub struct FieldBasedTooltip_ {
        pub aggregation_visibility: Option<serde_json::Value>,
        pub tooltip_fields: Option<Vec<TooltipItem_>>,
        pub tooltip_title_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FieldBasedTooltip {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FieldBasedTooltip"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FieldBasedTooltip as FieldBasedTooltip;
    impl crate::value::ToValue for FieldBasedTooltip_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_visibility {
                properties.insert(
                    "AggregationVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_fields {
                properties.insert(
                    "TooltipFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_title_type {
                properties.insert(
                    "TooltipTitleType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fieldlabeltype.html
    pub struct FieldLabelType_ {
        pub field_id: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FieldLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FieldLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FieldLabelType as FieldLabelType;
    impl crate::value::ToValue for FieldLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fieldseriesitem.html
    pub struct FieldSeriesItem_ {
        pub axis_binding: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
        pub settings: Option<Box<LineChartSeriesSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FieldSeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FieldSeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FieldSeriesItem as FieldSeriesItem;
    impl crate::value::ToValue for FieldSeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AxisBinding".to_string(),
                crate::value::ToValue::to_value(&self.axis_binding),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.settings {
                properties.insert(
                    "Settings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fieldsort.html
    pub struct FieldSort_ {
        pub direction: crate::value::ExpString,
        pub field_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FieldSort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FieldSort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FieldSort as FieldSort;
    impl crate::value::ToValue for FieldSort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Direction".to_string(),
                crate::value::ToValue::to_value(&self.direction),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fieldsortoptions.html
    pub struct FieldSortOptions_ {
        pub column_sort: Option<Box<ColumnSort_>>,
        pub field_sort: Option<Box<FieldSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FieldSortOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FieldSortOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FieldSortOptions as FieldSortOptions;
    impl crate::value::ToValue for FieldSortOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_sort {
                properties.insert(
                    "ColumnSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_sort {
                properties.insert(
                    "FieldSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fieldtooltipitem.html
    pub struct FieldTooltipItem_ {
        pub field_id: crate::value::ExpString,
        pub label: Option<crate::value::ExpString>,
        pub tooltip_target: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FieldTooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FieldTooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FieldTooltipItem as FieldTooltipItem;
    impl crate::value::ToValue for FieldTooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_target {
                properties.insert(
                    "TooltipTarget".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapaggregatedfieldwells.html
    pub struct FilledMapAggregatedFieldWells_ {
        pub geospatial: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapAggregatedFieldWells as FilledMapAggregatedFieldWells;
    impl crate::value::ToValue for FilledMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geospatial {
                properties.insert(
                    "Geospatial".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapconditionalformatting.html
    pub struct FilledMapConditionalFormatting_ {
        pub conditional_formatting_options: Vec<FilledMapConditionalFormattingOption_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapConditionalFormatting as FilledMapConditionalFormatting;
    impl crate::value::ToValue for FilledMapConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ConditionalFormattingOptions".to_string(),
                crate::value::ToValue::to_value(&self.conditional_formatting_options),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapconditionalformattingoption.html
    pub struct FilledMapConditionalFormattingOption_ {
        pub shape: Box<FilledMapShapeConditionalFormatting_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapConditionalFormattingOption as FilledMapConditionalFormattingOption;
    impl crate::value::ToValue for FilledMapConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Shape".to_string(),
                crate::value::ToValue::to_value(&self.shape),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapconfiguration.html
    pub struct FilledMapConfiguration_ {
        pub field_wells: Option<Box<FilledMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_style_options: Option<Box<GeospatialMapStyleOptions_>>,
        pub sort_configuration: Option<Box<FilledMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub window_options: Option<Box<GeospatialWindowOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapConfiguration as FilledMapConfiguration;
    impl crate::value::ToValue for FilledMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_style_options {
                properties.insert(
                    "MapStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.window_options {
                properties.insert(
                    "WindowOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapfieldwells.html
    pub struct FilledMapFieldWells_ {
        pub filled_map_aggregated_field_wells: Option<Box<FilledMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapFieldWells as FilledMapFieldWells;
    impl crate::value::ToValue for FilledMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filled_map_aggregated_field_wells {
                properties.insert(
                    "FilledMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapshapeconditionalformatting.html
    pub struct FilledMapShapeConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub format: Option<Box<ShapeConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapShapeConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapShapeConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapShapeConditionalFormatting as FilledMapShapeConditionalFormatting;
    impl crate::value::ToValue for FilledMapShapeConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format {
                properties.insert("Format".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapsortconfiguration.html
    pub struct FilledMapSortConfiguration_ {
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapSortConfiguration as FilledMapSortConfiguration;
    impl crate::value::ToValue for FilledMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filledmapvisual.html
    pub struct FilledMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<FilledMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub conditional_formatting: Option<Box<FilledMapConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilledMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilledMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilledMapVisual as FilledMapVisual;
    impl crate::value::ToValue for FilledMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filter.html
    pub struct Filter_ {
        pub category_filter: Option<Box<CategoryFilter_>>,
        pub nested_filter: Option<Box<NestedFilter_>>,
        pub numeric_equality_filter: Option<Box<NumericEqualityFilter_>>,
        pub numeric_range_filter: Option<Box<NumericRangeFilter_>>,
        pub relative_dates_filter: Option<Box<RelativeDatesFilter_>>,
        pub time_equality_filter: Option<Box<TimeEqualityFilter_>>,
        pub time_range_filter: Option<Box<TimeRangeFilter_>>,
        pub top_bottom_filter: Option<Box<TopBottomFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Filter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Filter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Filter as Filter;
    impl crate::value::ToValue for Filter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.nested_filter {
                properties.insert(
                    "NestedFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_range_filter {
                properties.insert(
                    "NumericRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_dates_filter {
                properties.insert(
                    "RelativeDatesFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_equality_filter {
                properties.insert(
                    "TimeEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_range_filter {
                properties.insert(
                    "TimeRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.top_bottom_filter {
                properties.insert(
                    "TopBottomFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filtercontrol.html
    pub struct FilterControl_ {
        pub cross_sheet: Option<Box<FilterCrossSheetControl_>>,
        pub date_time_picker: Option<Box<FilterDateTimePickerControl_>>,
        pub dropdown: Option<Box<FilterDropDownControl_>>,
        pub list: Option<Box<FilterListControl_>>,
        pub relative_date_time: Option<Box<FilterRelativeDateTimeControl_>>,
        pub slider: Option<Box<FilterSliderControl_>>,
        pub text_area: Option<Box<FilterTextAreaControl_>>,
        pub text_field: Option<Box<FilterTextFieldControl_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterControl as FilterControl;
    impl crate::value::ToValue for FilterControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cross_sheet {
                properties.insert(
                    "CrossSheet".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_time_picker {
                properties.insert(
                    "DateTimePicker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dropdown {
                properties.insert(
                    "Dropdown".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list {
                properties.insert("List".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.relative_date_time {
                properties.insert(
                    "RelativeDateTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.slider {
                properties.insert("Slider".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_area {
                properties.insert(
                    "TextArea".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_field {
                properties.insert(
                    "TextField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filtercrosssheetcontrol.html
    pub struct FilterCrossSheetControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterCrossSheetControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterCrossSheetControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterCrossSheetControl as FilterCrossSheetControl;
    impl crate::value::ToValue for FilterCrossSheetControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterdatetimepickercontrol.html
    pub struct FilterDateTimePickerControl_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterDateTimePickerControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterDateTimePickerControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterDateTimePickerControl as FilterDateTimePickerControl;
    impl crate::value::ToValue for FilterDateTimePickerControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterdropdowncontrol.html
    pub struct FilterDropDownControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterDropDownControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterDropDownControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterDropDownControl as FilterDropDownControl;
    impl crate::value::ToValue for FilterDropDownControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filtergroup.html
    pub struct FilterGroup_ {
        pub cross_dataset: crate::value::ExpString,
        pub filter_group_id: crate::value::ExpString,
        pub filters: Vec<Filter_>,
        pub scope_configuration: Box<FilterScopeConfiguration_>,
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterGroup {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterGroup"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterGroup as FilterGroup;
    impl crate::value::ToValue for FilterGroup_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CrossDataset".to_string(),
                crate::value::ToValue::to_value(&self.cross_dataset),
            );
            properties.insert(
                "FilterGroupId".to_string(),
                crate::value::ToValue::to_value(&self.filter_group_id),
            );
            properties.insert(
                "Filters".to_string(),
                crate::value::ToValue::to_value(&self.filters),
            );
            properties.insert(
                "ScopeConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.scope_configuration),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterlistconfiguration.html
    pub struct FilterListConfiguration_ {
        pub category_values: Option<Vec<crate::value::ExpString>>,
        pub match_operator: crate::value::ExpString,
        pub null_option: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterListConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterListConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterListConfiguration as FilterListConfiguration;
    impl crate::value::ToValue for FilterListConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_values {
                properties.insert(
                    "CategoryValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            if let Some(ref value) = self.null_option {
                properties.insert(
                    "NullOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterlistcontrol.html
    pub struct FilterListControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<FilterSelectableValues_>>,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterListControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterListControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterListControl as FilterListControl;
    impl crate::value::ToValue for FilterListControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filteroperationselectedfieldsconfiguration.html
    pub struct FilterOperationSelectedFieldsConfiguration_ {
        pub selected_columns: Option<Vec<ColumnIdentifier_>>,
        pub selected_field_options: Option<crate::value::ExpString>,
        pub selected_fields: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterOperationSelectedFieldsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterOperationSelectedFieldsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterOperationSelectedFieldsConfiguration as FilterOperationSelectedFieldsConfiguration;
    impl crate::value::ToValue for FilterOperationSelectedFieldsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.selected_columns {
                properties.insert(
                    "SelectedColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_fields {
                properties.insert(
                    "SelectedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filteroperationtargetvisualsconfiguration.html
    pub struct FilterOperationTargetVisualsConfiguration_ {
        pub same_sheet_target_visual_configuration:
            Option<Box<SameSheetTargetVisualConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterOperationTargetVisualsConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterOperationTargetVisualsConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterOperationTargetVisualsConfiguration as FilterOperationTargetVisualsConfiguration;
    impl crate::value::ToValue for FilterOperationTargetVisualsConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.same_sheet_target_visual_configuration {
                properties.insert(
                    "SameSheetTargetVisualConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterrelativedatetimecontrol.html
    pub struct FilterRelativeDateTimeControl_ {
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<RelativeDateTimeControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterRelativeDateTimeControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterRelativeDateTimeControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterRelativeDateTimeControl as FilterRelativeDateTimeControl;
    impl crate::value::ToValue for FilterRelativeDateTimeControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterscopeconfiguration.html
    pub struct FilterScopeConfiguration_ {
        pub all_sheets: Option<serde_json::Value>,
        pub selected_sheets: Option<Box<SelectedSheetsFilterScopeConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterScopeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterScopeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterScopeConfiguration as FilterScopeConfiguration;
    impl crate::value::ToValue for FilterScopeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.all_sheets {
                properties.insert(
                    "AllSheets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_sheets {
                properties.insert(
                    "SelectedSheets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterselectablevalues.html
    pub struct FilterSelectableValues_ {
        pub values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterSelectableValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterSelectableValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterSelectableValues as FilterSelectableValues;
    impl crate::value::ToValue for FilterSelectableValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filterslidercontrol.html
    pub struct FilterSliderControl_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub source_filter_id: crate::value::ExpString,
        pub step_size: f64,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterSliderControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterSliderControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterSliderControl as FilterSliderControl;
    impl crate::value::ToValue for FilterSliderControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filtertextareacontrol.html
    pub struct FilterTextAreaControl_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterTextAreaControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterTextAreaControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterTextAreaControl as FilterTextAreaControl;
    impl crate::value::ToValue for FilterTextAreaControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-filtertextfieldcontrol.html
    pub struct FilterTextFieldControl_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
        pub filter_control_id: crate::value::ExpString,
        pub source_filter_id: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FilterTextFieldControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FilterTextFieldControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FilterTextFieldControl as FilterTextFieldControl;
    impl crate::value::ToValue for FilterTextFieldControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterControlId".to_string(),
                crate::value::ToValue::to_value(&self.filter_control_id),
            );
            properties.insert(
                "SourceFilterId".to_string(),
                crate::value::ToValue::to_value(&self.source_filter_id),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fontconfiguration.html
    pub struct FontConfiguration_ {
        pub font_color: Option<crate::value::ExpString>,
        pub font_decoration: Option<crate::value::ExpString>,
        pub font_family: Option<crate::value::ExpString>,
        pub font_size: Option<Box<FontSize_>>,
        pub font_style: Option<crate::value::ExpString>,
        pub font_weight: Option<Box<FontWeight_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FontConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FontConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FontConfiguration as FontConfiguration;
    impl crate::value::ToValue for FontConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_color {
                properties.insert(
                    "FontColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_decoration {
                properties.insert(
                    "FontDecoration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_family {
                properties.insert(
                    "FontFamily".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_size {
                properties.insert(
                    "FontSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_style {
                properties.insert(
                    "FontStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_weight {
                properties.insert(
                    "FontWeight".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fontsize.html
    pub struct FontSize_ {
        pub absolute: Option<crate::value::ExpString>,
        pub relative: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FontSize {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FontSize"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FontSize as FontSize;
    impl crate::value::ToValue for FontSize_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.absolute {
                properties.insert(
                    "Absolute".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative {
                properties.insert(
                    "Relative".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-fontweight.html
    pub struct FontWeight_ {
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FontWeight {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FontWeight"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FontWeight as FontWeight;
    impl crate::value::ToValue for FontWeight_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-forecastcomputation.html
    pub struct ForecastComputation_ {
        pub computation_id: crate::value::ExpString,
        pub custom_seasonality_value: Option<f64>,
        pub lower_boundary: Option<f64>,
        pub name: Option<crate::value::ExpString>,
        pub periods_backward: Option<f64>,
        pub periods_forward: Option<f64>,
        pub prediction_interval: Option<f64>,
        pub seasonality: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub upper_boundary: Option<f64>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ForecastComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ForecastComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ForecastComputation as ForecastComputation;
    impl crate::value::ToValue for ForecastComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.custom_seasonality_value {
                properties.insert(
                    "CustomSeasonalityValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.lower_boundary {
                properties.insert(
                    "LowerBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.periods_backward {
                properties.insert(
                    "PeriodsBackward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_forward {
                properties.insert(
                    "PeriodsForward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prediction_interval {
                properties.insert(
                    "PredictionInterval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.seasonality {
                properties.insert(
                    "Seasonality".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.upper_boundary {
                properties.insert(
                    "UpperBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-forecastconfiguration.html
    pub struct ForecastConfiguration_ {
        pub forecast_properties: Option<Box<TimeBasedForecastProperties_>>,
        pub scenario: Option<Box<ForecastScenario_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ForecastConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ForecastConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ForecastConfiguration as ForecastConfiguration;
    impl crate::value::ToValue for ForecastConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.forecast_properties {
                properties.insert(
                    "ForecastProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scenario {
                properties.insert(
                    "Scenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-forecastscenario.html
    pub struct ForecastScenario_ {
        pub what_if_point_scenario: Option<Box<WhatIfPointScenario_>>,
        pub what_if_range_scenario: Option<Box<WhatIfRangeScenario_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ForecastScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ForecastScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ForecastScenario as ForecastScenario;
    impl crate::value::ToValue for ForecastScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.what_if_point_scenario {
                properties.insert(
                    "WhatIfPointScenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.what_if_range_scenario {
                properties.insert(
                    "WhatIfRangeScenario".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-formatconfiguration.html
    pub struct FormatConfiguration_ {
        pub date_time_format_configuration: Option<Box<DateTimeFormatConfiguration_>>,
        pub number_format_configuration: Option<Box<NumberFormatConfiguration_>>,
        pub string_format_configuration: Option<Box<StringFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FormatConfiguration as FormatConfiguration;
    impl crate::value::ToValue for FormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format_configuration {
                properties.insert(
                    "DateTimeFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_format_configuration {
                properties.insert(
                    "NumberFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_format_configuration {
                properties.insert(
                    "StringFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformlayoutcanvassizeoptions.html
    pub struct FreeFormLayoutCanvasSizeOptions_ {
        pub screen_canvas_size_options: Option<Box<FreeFormLayoutScreenCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormLayoutCanvasSizeOptions as FreeFormLayoutCanvasSizeOptions;
    impl crate::value::ToValue for FreeFormLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.screen_canvas_size_options {
                properties.insert(
                    "ScreenCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformlayoutconfiguration.html
    pub struct FreeFormLayoutConfiguration_ {
        pub canvas_size_options: Option<Box<FreeFormLayoutCanvasSizeOptions_>>,
        pub elements: Vec<FreeFormLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormLayoutConfiguration as FreeFormLayoutConfiguration;
    impl crate::value::ToValue for FreeFormLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.canvas_size_options {
                properties.insert(
                    "CanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformlayoutelement.html
    pub struct FreeFormLayoutElement_ {
        pub background_style: Option<Box<FreeFormLayoutElementBackgroundStyle_>>,
        pub border_style: Option<Box<FreeFormLayoutElementBorderStyle_>>,
        pub element_id: crate::value::ExpString,
        pub element_type: crate::value::ExpString,
        pub height: crate::value::ExpString,
        pub loading_animation: Option<Box<LoadingAnimation_>>,
        pub rendering_rules: Option<Vec<SheetElementRenderingRule_>>,
        pub selected_border_style: Option<Box<FreeFormLayoutElementBorderStyle_>>,
        pub visibility: Option<serde_json::Value>,
        pub width: crate::value::ExpString,
        pub x_axis_location: crate::value::ExpString,
        pub y_axis_location: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormLayoutElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormLayoutElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormLayoutElement as FreeFormLayoutElement;
    impl crate::value::ToValue for FreeFormLayoutElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_style {
                properties.insert(
                    "BackgroundStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ElementId".to_string(),
                crate::value::ToValue::to_value(&self.element_id),
            );
            properties.insert(
                "ElementType".to_string(),
                crate::value::ToValue::to_value(&self.element_type),
            );
            properties.insert(
                "Height".to_string(),
                crate::value::ToValue::to_value(&self.height),
            );
            if let Some(ref value) = self.loading_animation {
                properties.insert(
                    "LoadingAnimation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rendering_rules {
                properties.insert(
                    "RenderingRules".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_border_style {
                properties.insert(
                    "SelectedBorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Width".to_string(),
                crate::value::ToValue::to_value(&self.width),
            );
            properties.insert(
                "XAxisLocation".to_string(),
                crate::value::ToValue::to_value(&self.x_axis_location),
            );
            properties.insert(
                "YAxisLocation".to_string(),
                crate::value::ToValue::to_value(&self.y_axis_location),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformlayoutelementbackgroundstyle.html
    pub struct FreeFormLayoutElementBackgroundStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormLayoutElementBackgroundStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormLayoutElementBackgroundStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormLayoutElementBackgroundStyle as FreeFormLayoutElementBackgroundStyle;
    impl crate::value::ToValue for FreeFormLayoutElementBackgroundStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformlayoutelementborderstyle.html
    pub struct FreeFormLayoutElementBorderStyle_ {
        pub color: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormLayoutElementBorderStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormLayoutElementBorderStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormLayoutElementBorderStyle as FreeFormLayoutElementBorderStyle;
    impl crate::value::ToValue for FreeFormLayoutElementBorderStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformlayoutscreencanvassizeoptions.html
    pub struct FreeFormLayoutScreenCanvasSizeOptions_ {
        pub optimized_view_port_width: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormLayoutScreenCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormLayoutScreenCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormLayoutScreenCanvasSizeOptions as FreeFormLayoutScreenCanvasSizeOptions;
    impl crate::value::ToValue for FreeFormLayoutScreenCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "OptimizedViewPortWidth".to_string(),
                crate::value::ToValue::to_value(&self.optimized_view_port_width),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-freeformsectionlayoutconfiguration.html
    pub struct FreeFormSectionLayoutConfiguration_ {
        pub elements: Vec<FreeFormLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FreeFormSectionLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FreeFormSectionLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FreeFormSectionLayoutConfiguration as FreeFormSectionLayoutConfiguration;
    impl crate::value::ToValue for FreeFormSectionLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-funnelchartaggregatedfieldwells.html
    pub struct FunnelChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FunnelChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FunnelChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FunnelChartAggregatedFieldWells as FunnelChartAggregatedFieldWells;
    impl crate::value::ToValue for FunnelChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-funnelchartconfiguration.html
    pub struct FunnelChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub data_label_options: Option<Box<FunnelChartDataLabelOptions_>>,
        pub field_wells: Option<Box<FunnelChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<FunnelChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FunnelChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FunnelChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FunnelChartConfiguration as FunnelChartConfiguration;
    impl crate::value::ToValue for FunnelChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_label_options {
                properties.insert(
                    "DataLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-funnelchartdatalabeloptions.html
    pub struct FunnelChartDataLabelOptions_ {
        pub category_label_visibility: Option<serde_json::Value>,
        pub label_color: Option<crate::value::ExpString>,
        pub label_font_configuration: Option<Box<FontConfiguration_>>,
        pub measure_data_label_style: Option<crate::value::ExpString>,
        pub measure_label_visibility: Option<serde_json::Value>,
        pub position: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FunnelChartDataLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FunnelChartDataLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FunnelChartDataLabelOptions as FunnelChartDataLabelOptions;
    impl crate::value::ToValue for FunnelChartDataLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_visibility {
                properties.insert(
                    "CategoryLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_color {
                properties.insert(
                    "LabelColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label_font_configuration {
                properties.insert(
                    "LabelFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_data_label_style {
                properties.insert(
                    "MeasureDataLabelStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_label_visibility {
                properties.insert(
                    "MeasureLabelVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-funnelchartfieldwells.html
    pub struct FunnelChartFieldWells_ {
        pub funnel_chart_aggregated_field_wells: Option<Box<FunnelChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FunnelChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FunnelChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FunnelChartFieldWells as FunnelChartFieldWells;
    impl crate::value::ToValue for FunnelChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.funnel_chart_aggregated_field_wells {
                properties.insert(
                    "FunnelChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-funnelchartsortconfiguration.html
    pub struct FunnelChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FunnelChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FunnelChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FunnelChartSortConfiguration as FunnelChartSortConfiguration;
    impl crate::value::ToValue for FunnelChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-funnelchartvisual.html
    pub struct FunnelChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<FunnelChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_FunnelChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.FunnelChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_FunnelChartVisual as FunnelChartVisual;
    impl crate::value::ToValue for FunnelChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartarcconditionalformatting.html
    pub struct GaugeChartArcConditionalFormatting_ {
        pub foreground_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartArcConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartArcConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartArcConditionalFormatting as GaugeChartArcConditionalFormatting;
    impl crate::value::ToValue for GaugeChartArcConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartcolorconfiguration.html
    pub struct GaugeChartColorConfiguration_ {
        pub background_color: Option<crate::value::ExpString>,
        pub foreground_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartColorConfiguration as GaugeChartColorConfiguration;
    impl crate::value::ToValue for GaugeChartColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartconditionalformatting.html
    pub struct GaugeChartConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<GaugeChartConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartConditionalFormatting as GaugeChartConditionalFormatting;
    impl crate::value::ToValue for GaugeChartConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartconditionalformattingoption.html
    pub struct GaugeChartConditionalFormattingOption_ {
        pub arc: Option<Box<GaugeChartArcConditionalFormatting_>>,
        pub primary_value: Option<Box<GaugeChartPrimaryValueConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartConditionalFormattingOption as GaugeChartConditionalFormattingOption;
    impl crate::value::ToValue for GaugeChartConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc {
                properties.insert("Arc".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_value {
                properties.insert(
                    "PrimaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartconfiguration.html
    pub struct GaugeChartConfiguration_ {
        pub color_configuration: Option<Box<GaugeChartColorConfiguration_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<GaugeChartFieldWells_>>,
        pub gauge_chart_options: Option<Box<GaugeChartOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub tooltip_options: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartConfiguration as GaugeChartConfiguration;
    impl crate::value::ToValue for GaugeChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_configuration {
                properties.insert(
                    "ColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gauge_chart_options {
                properties.insert(
                    "GaugeChartOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_options {
                properties.insert(
                    "TooltipOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartfieldwells.html
    pub struct GaugeChartFieldWells_ {
        pub target_values: Option<Vec<MeasureField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartFieldWells as GaugeChartFieldWells;
    impl crate::value::ToValue for GaugeChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_values {
                properties.insert(
                    "TargetValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartoptions.html
    pub struct GaugeChartOptions_ {
        pub arc: Option<Box<ArcConfiguration_>>,
        pub arc_axis: Option<Box<ArcAxisConfiguration_>>,
        pub comparison: Option<Box<ComparisonConfiguration_>>,
        pub primary_value_display_type: Option<crate::value::ExpString>,
        pub primary_value_font_configuration: Option<Box<FontConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartOptions as GaugeChartOptions;
    impl crate::value::ToValue for GaugeChartOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arc {
                properties.insert("Arc".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.arc_axis {
                properties.insert(
                    "ArcAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison {
                properties.insert(
                    "Comparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_display_type {
                properties.insert(
                    "PrimaryValueDisplayType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_font_configuration {
                properties.insert(
                    "PrimaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartprimaryvalueconditionalformatting.html
    pub struct GaugeChartPrimaryValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartPrimaryValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartPrimaryValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartPrimaryValueConditionalFormatting as GaugeChartPrimaryValueConditionalFormatting;
    impl crate::value::ToValue for GaugeChartPrimaryValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gaugechartvisual.html
    pub struct GaugeChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<GaugeChartConfiguration_>>,
        pub conditional_formatting: Option<Box<GaugeChartConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GaugeChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GaugeChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GaugeChartVisual as GaugeChartVisual;
    impl crate::value::ToValue for GaugeChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialcoordinatebounds.html
    pub struct GeospatialCoordinateBounds_ {
        pub east: f64,
        pub north: f64,
        pub south: f64,
        pub west: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialCoordinateBounds {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialCoordinateBounds"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialCoordinateBounds as GeospatialCoordinateBounds;
    impl crate::value::ToValue for GeospatialCoordinateBounds_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "East".to_string(),
                crate::value::ToValue::to_value(&self.east),
            );
            properties.insert(
                "North".to_string(),
                crate::value::ToValue::to_value(&self.north),
            );
            properties.insert(
                "South".to_string(),
                crate::value::ToValue::to_value(&self.south),
            );
            properties.insert(
                "West".to_string(),
                crate::value::ToValue::to_value(&self.west),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialheatmapcolorscale.html
    pub struct GeospatialHeatmapColorScale_ {
        pub colors: Option<Vec<GeospatialHeatmapDataColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialHeatmapColorScale {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialHeatmapColorScale"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialHeatmapColorScale as GeospatialHeatmapColorScale;
    impl crate::value::ToValue for GeospatialHeatmapColorScale_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialheatmapconfiguration.html
    pub struct GeospatialHeatmapConfiguration_ {
        pub heatmap_color: Option<Box<GeospatialHeatmapColorScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialHeatmapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialHeatmapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialHeatmapConfiguration as GeospatialHeatmapConfiguration;
    impl crate::value::ToValue for GeospatialHeatmapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heatmap_color {
                properties.insert(
                    "HeatmapColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialheatmapdatacolor.html
    pub struct GeospatialHeatmapDataColor_ {
        pub color: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialHeatmapDataColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialHeatmapDataColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialHeatmapDataColor as GeospatialHeatmapDataColor;
    impl crate::value::ToValue for GeospatialHeatmapDataColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Color".to_string(),
                crate::value::ToValue::to_value(&self.color),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialmapaggregatedfieldwells.html
    pub struct GeospatialMapAggregatedFieldWells_ {
        pub colors: Option<Vec<DimensionField_>>,
        pub geospatial: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialMapAggregatedFieldWells as GeospatialMapAggregatedFieldWells;
    impl crate::value::ToValue for GeospatialMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.geospatial {
                properties.insert(
                    "Geospatial".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialmapconfiguration.html
    pub struct GeospatialMapConfiguration_ {
        pub field_wells: Option<Box<GeospatialMapFieldWells_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub map_style_options: Option<Box<GeospatialMapStyleOptions_>>,
        pub point_style_options: Option<Box<GeospatialPointStyleOptions_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub window_options: Option<Box<GeospatialWindowOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialMapConfiguration as GeospatialMapConfiguration;
    impl crate::value::ToValue for GeospatialMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_style_options {
                properties.insert(
                    "MapStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.point_style_options {
                properties.insert(
                    "PointStyleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.window_options {
                properties.insert(
                    "WindowOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialmapfieldwells.html
    pub struct GeospatialMapFieldWells_ {
        pub geospatial_map_aggregated_field_wells: Option<Box<GeospatialMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialMapFieldWells as GeospatialMapFieldWells;
    impl crate::value::ToValue for GeospatialMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.geospatial_map_aggregated_field_wells {
                properties.insert(
                    "GeospatialMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialmapstyleoptions.html
    pub struct GeospatialMapStyleOptions_ {
        pub base_map_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialMapStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialMapStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialMapStyleOptions as GeospatialMapStyleOptions;
    impl crate::value::ToValue for GeospatialMapStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.base_map_style {
                properties.insert(
                    "BaseMapStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialmapvisual.html
    pub struct GeospatialMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<GeospatialMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialMapVisual as GeospatialMapVisual;
    impl crate::value::ToValue for GeospatialMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialpointstyleoptions.html
    pub struct GeospatialPointStyleOptions_ {
        pub cluster_marker_configuration: Option<Box<ClusterMarkerConfiguration_>>,
        pub heatmap_configuration: Option<Box<GeospatialHeatmapConfiguration_>>,
        pub selected_point_style: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialPointStyleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialPointStyleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialPointStyleOptions as GeospatialPointStyleOptions;
    impl crate::value::ToValue for GeospatialPointStyleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cluster_marker_configuration {
                properties.insert(
                    "ClusterMarkerConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heatmap_configuration {
                properties.insert(
                    "HeatmapConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_point_style {
                properties.insert(
                    "SelectedPointStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-geospatialwindowoptions.html
    pub struct GeospatialWindowOptions_ {
        pub bounds: Option<Box<GeospatialCoordinateBounds_>>,
        pub map_zoom_mode: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GeospatialWindowOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GeospatialWindowOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GeospatialWindowOptions as GeospatialWindowOptions;
    impl crate::value::ToValue for GeospatialWindowOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bounds {
                properties.insert("Bounds".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.map_zoom_mode {
                properties.insert(
                    "MapZoomMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-globaltableborderoptions.html
    pub struct GlobalTableBorderOptions_ {
        pub side_specific_border: Option<Box<TableSideBorderOptions_>>,
        pub uniform_border: Option<Box<TableBorderOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GlobalTableBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GlobalTableBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GlobalTableBorderOptions as GlobalTableBorderOptions;
    impl crate::value::ToValue for GlobalTableBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.side_specific_border {
                properties.insert(
                    "SideSpecificBorder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.uniform_border {
                properties.insert(
                    "UniformBorder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gradientcolor.html
    pub struct GradientColor_ {
        pub stops: Option<Vec<GradientStop_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GradientColor {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GradientColor"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GradientColor as GradientColor;
    impl crate::value::ToValue for GradientColor_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.stops {
                properties.insert("Stops".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gradientstop.html
    pub struct GradientStop_ {
        pub color: Option<crate::value::ExpString>,
        pub data_value: Option<f64>,
        pub gradient_offset: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GradientStop {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GradientStop"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GradientStop as GradientStop;
    impl crate::value::ToValue for GradientStop_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_value {
                properties.insert(
                    "DataValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "GradientOffset".to_string(),
                crate::value::ToValue::to_value(&self.gradient_offset),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gridlayoutcanvassizeoptions.html
    pub struct GridLayoutCanvasSizeOptions_ {
        pub screen_canvas_size_options: Option<Box<GridLayoutScreenCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GridLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GridLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GridLayoutCanvasSizeOptions as GridLayoutCanvasSizeOptions;
    impl crate::value::ToValue for GridLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.screen_canvas_size_options {
                properties.insert(
                    "ScreenCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gridlayoutconfiguration.html
    pub struct GridLayoutConfiguration_ {
        pub canvas_size_options: Option<Box<GridLayoutCanvasSizeOptions_>>,
        pub elements: Vec<GridLayoutElement_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GridLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GridLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GridLayoutConfiguration as GridLayoutConfiguration;
    impl crate::value::ToValue for GridLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.canvas_size_options {
                properties.insert(
                    "CanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Elements".to_string(),
                crate::value::ToValue::to_value(&self.elements),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gridlayoutelement.html
    pub struct GridLayoutElement_ {
        pub column_index: Option<f64>,
        pub column_span: f64,
        pub element_id: crate::value::ExpString,
        pub element_type: crate::value::ExpString,
        pub row_index: Option<f64>,
        pub row_span: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GridLayoutElement {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GridLayoutElement"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GridLayoutElement as GridLayoutElement;
    impl crate::value::ToValue for GridLayoutElement_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_index {
                properties.insert(
                    "ColumnIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnSpan".to_string(),
                crate::value::ToValue::to_value(&self.column_span),
            );
            properties.insert(
                "ElementId".to_string(),
                crate::value::ToValue::to_value(&self.element_id),
            );
            properties.insert(
                "ElementType".to_string(),
                crate::value::ToValue::to_value(&self.element_type),
            );
            if let Some(ref value) = self.row_index {
                properties.insert(
                    "RowIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RowSpan".to_string(),
                crate::value::ToValue::to_value(&self.row_span),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-gridlayoutscreencanvassizeoptions.html
    pub struct GridLayoutScreenCanvasSizeOptions_ {
        pub optimized_view_port_width: Option<crate::value::ExpString>,
        pub resize_option: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GridLayoutScreenCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GridLayoutScreenCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GridLayoutScreenCanvasSizeOptions as GridLayoutScreenCanvasSizeOptions;
    impl crate::value::ToValue for GridLayoutScreenCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.optimized_view_port_width {
                properties.insert(
                    "OptimizedViewPortWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ResizeOption".to_string(),
                crate::value::ToValue::to_value(&self.resize_option),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-growthratecomputation.html
    pub struct GrowthRateComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub period_size: Option<f64>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_GrowthRateComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.GrowthRateComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_GrowthRateComputation as GrowthRateComputation;
    impl crate::value::ToValue for GrowthRateComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.period_size {
                properties.insert(
                    "PeriodSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-headerfootersectionconfiguration.html
    pub struct HeaderFooterSectionConfiguration_ {
        pub layout: Box<SectionLayoutConfiguration_>,
        pub section_id: crate::value::ExpString,
        pub style: Option<Box<SectionStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HeaderFooterSectionConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HeaderFooterSectionConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HeaderFooterSectionConfiguration as HeaderFooterSectionConfiguration;
    impl crate::value::ToValue for HeaderFooterSectionConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Layout".to_string(),
                crate::value::ToValue::to_value(&self.layout),
            );
            properties.insert(
                "SectionId".to_string(),
                crate::value::ToValue::to_value(&self.section_id),
            );
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-heatmapaggregatedfieldwells.html
    pub struct HeatMapAggregatedFieldWells_ {
        pub columns: Option<Vec<DimensionField_>>,
        pub rows: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HeatMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HeatMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HeatMapAggregatedFieldWells as HeatMapAggregatedFieldWells;
    impl crate::value::ToValue for HeatMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows {
                properties.insert("Rows".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-heatmapconfiguration.html
    pub struct HeatMapConfiguration_ {
        pub color_scale: Option<Box<ColorScale_>>,
        pub column_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<HeatMapFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub row_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<HeatMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HeatMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HeatMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HeatMapConfiguration as HeatMapConfiguration;
    impl crate::value::ToValue for HeatMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_scale {
                properties.insert(
                    "ColorScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_label_options {
                properties.insert(
                    "ColumnLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.row_label_options {
                properties.insert(
                    "RowLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-heatmapfieldwells.html
    pub struct HeatMapFieldWells_ {
        pub heat_map_aggregated_field_wells: Option<Box<HeatMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HeatMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HeatMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HeatMapFieldWells as HeatMapFieldWells;
    impl crate::value::ToValue for HeatMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heat_map_aggregated_field_wells {
                properties.insert(
                    "HeatMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-heatmapsortconfiguration.html
    pub struct HeatMapSortConfiguration_ {
        pub heat_map_column_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub heat_map_column_sort: Option<Vec<FieldSortOptions_>>,
        pub heat_map_row_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub heat_map_row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HeatMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HeatMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HeatMapSortConfiguration as HeatMapSortConfiguration;
    impl crate::value::ToValue for HeatMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.heat_map_column_items_limit_configuration {
                properties.insert(
                    "HeatMapColumnItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_column_sort {
                properties.insert(
                    "HeatMapColumnSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_row_items_limit_configuration {
                properties.insert(
                    "HeatMapRowItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_row_sort {
                properties.insert(
                    "HeatMapRowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-heatmapvisual.html
    pub struct HeatMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<HeatMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HeatMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HeatMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HeatMapVisual as HeatMapVisual;
    impl crate::value::ToValue for HeatMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-histogramaggregatedfieldwells.html
    pub struct HistogramAggregatedFieldWells_ {
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HistogramAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HistogramAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HistogramAggregatedFieldWells as HistogramAggregatedFieldWells;
    impl crate::value::ToValue for HistogramAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-histogrambinoptions.html
    pub struct HistogramBinOptions_ {
        pub bin_count: Option<Box<BinCountOptions_>>,
        pub bin_width: Option<Box<BinWidthOptions_>>,
        pub selected_bin_type: Option<crate::value::ExpString>,
        pub start_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HistogramBinOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HistogramBinOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HistogramBinOptions as HistogramBinOptions;
    impl crate::value::ToValue for HistogramBinOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_count {
                properties.insert(
                    "BinCount".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.bin_width {
                properties.insert(
                    "BinWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_bin_type {
                properties.insert(
                    "SelectedBinType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_value {
                properties.insert(
                    "StartValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-histogramconfiguration.html
    pub struct HistogramConfiguration_ {
        pub bin_options: Option<Box<HistogramBinOptions_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<HistogramFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HistogramConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HistogramConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HistogramConfiguration as HistogramConfiguration;
    impl crate::value::ToValue for HistogramConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bin_options {
                properties.insert(
                    "BinOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_display_options {
                properties.insert(
                    "YAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-histogramfieldwells.html
    pub struct HistogramFieldWells_ {
        pub histogram_aggregated_field_wells: Option<Box<HistogramAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HistogramFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HistogramFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HistogramFieldWells as HistogramFieldWells;
    impl crate::value::ToValue for HistogramFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.histogram_aggregated_field_wells {
                properties.insert(
                    "HistogramAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-histogramvisual.html
    pub struct HistogramVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<HistogramConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_HistogramVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.HistogramVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_HistogramVisual as HistogramVisual;
    impl crate::value::ToValue for HistogramVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-imagecustomaction.html
    pub struct ImageCustomAction_ {
        pub action_operations: Vec<ImageCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ImageCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ImageCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ImageCustomAction as ImageCustomAction;
    impl crate::value::ToValue for ImageCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-imagecustomactionoperation.html
    pub struct ImageCustomActionOperation_ {
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ImageCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ImageCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ImageCustomActionOperation as ImageCustomActionOperation;
    impl crate::value::ToValue for ImageCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-imageinteractionoptions.html
    pub struct ImageInteractionOptions_ {
        pub image_menu_option: Option<Box<ImageMenuOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ImageInteractionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ImageInteractionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ImageInteractionOptions as ImageInteractionOptions;
    impl crate::value::ToValue for ImageInteractionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_menu_option {
                properties.insert(
                    "ImageMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-imagemenuoption.html
    pub struct ImageMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ImageMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ImageMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ImageMenuOption as ImageMenuOption;
    impl crate::value::ToValue for ImageMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-innerfilter.html
    pub struct InnerFilter_ {
        pub category_inner_filter: Option<Box<CategoryInnerFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_InnerFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.InnerFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_InnerFilter as InnerFilter;
    impl crate::value::ToValue for InnerFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_inner_filter {
                properties.insert(
                    "CategoryInnerFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-insightconfiguration.html
    pub struct InsightConfiguration_ {
        pub computations: Option<Vec<Computation_>>,
        pub custom_narrative: Option<Box<CustomNarrativeOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_InsightConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.InsightConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_InsightConfiguration as InsightConfiguration;
    impl crate::value::ToValue for InsightConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.computations {
                properties.insert(
                    "Computations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_narrative {
                properties.insert(
                    "CustomNarrative".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-insightvisual.html
    pub struct InsightVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub data_set_identifier: crate::value::ExpString,
        pub insight_configuration: Option<Box<InsightConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_InsightVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.InsightVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_InsightVisual as InsightVisual;
    impl crate::value::ToValue for InsightVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            if let Some(ref value) = self.insight_configuration {
                properties.insert(
                    "InsightConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-integerdefaultvalues.html
    pub struct IntegerDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<f64>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_IntegerDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.IntegerDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_IntegerDefaultValues as IntegerDefaultValues;
    impl crate::value::ToValue for IntegerDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-integerparameterdeclaration.html
    pub struct IntegerParameterDeclaration_ {
        pub default_values: Option<Box<IntegerDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<IntegerValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_IntegerParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.IntegerParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_IntegerParameterDeclaration as IntegerParameterDeclaration;
    impl crate::value::ToValue for IntegerParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-integervaluewhenunsetconfiguration.html
    pub struct IntegerValueWhenUnsetConfiguration_ {
        pub custom_value: Option<f64>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_IntegerValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.IntegerValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_IntegerValueWhenUnsetConfiguration as IntegerValueWhenUnsetConfiguration;
    impl crate::value::ToValue for IntegerValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-itemslimitconfiguration.html
    pub struct ItemsLimitConfiguration_ {
        pub items_limit: Option<f64>,
        pub other_categories: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ItemsLimitConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ItemsLimitConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ItemsLimitConfiguration as ItemsLimitConfiguration;
    impl crate::value::ToValue for ItemsLimitConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit {
                properties.insert(
                    "ItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.other_categories {
                properties.insert(
                    "OtherCategories".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpiactualvalueconditionalformatting.html
    pub struct KPIActualValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIActualValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIActualValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIActualValueConditionalFormatting as KPIActualValueConditionalFormatting;
    impl crate::value::ToValue for KPIActualValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpicomparisonvalueconditionalformatting.html
    pub struct KPIComparisonValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIComparisonValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIComparisonValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIComparisonValueConditionalFormatting as KPIComparisonValueConditionalFormatting;
    impl crate::value::ToValue for KPIComparisonValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpiconditionalformatting.html
    pub struct KPIConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<KPIConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIConditionalFormatting as KPIConditionalFormatting;
    impl crate::value::ToValue for KPIConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpiconditionalformattingoption.html
    pub struct KPIConditionalFormattingOption_ {
        pub actual_value: Option<Box<KPIActualValueConditionalFormatting_>>,
        pub comparison_value: Option<Box<KPIComparisonValueConditionalFormatting_>>,
        pub primary_value: Option<Box<KPIPrimaryValueConditionalFormatting_>>,
        pub progress_bar: Option<Box<KPIProgressBarConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIConditionalFormattingOption as KPIConditionalFormattingOption;
    impl crate::value::ToValue for KPIConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actual_value {
                properties.insert(
                    "ActualValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparison_value {
                properties.insert(
                    "ComparisonValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value {
                properties.insert(
                    "PrimaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.progress_bar {
                properties.insert(
                    "ProgressBar".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpiconfiguration.html
    pub struct KPIConfiguration_ {
        pub field_wells: Option<Box<KPIFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub kpi_options: Option<Box<KPIOptions_>>,
        pub sort_configuration: Option<Box<KPISortConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIConfiguration as KPIConfiguration;
    impl crate::value::ToValue for KPIConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.kpi_options {
                properties.insert(
                    "KPIOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpifieldwells.html
    pub struct KPIFieldWells_ {
        pub target_values: Option<Vec<MeasureField_>>,
        pub trend_groups: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIFieldWells as KPIFieldWells;
    impl crate::value::ToValue for KPIFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_values {
                properties.insert(
                    "TargetValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trend_groups {
                properties.insert(
                    "TrendGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpioptions.html
    pub struct KPIOptions_ {
        pub comparison: Option<Box<ComparisonConfiguration_>>,
        pub primary_value_display_type: Option<crate::value::ExpString>,
        pub primary_value_font_configuration: Option<Box<FontConfiguration_>>,
        pub progress_bar: Option<Box<ProgressBarOptions_>>,
        pub secondary_value: Option<Box<SecondaryValueOptions_>>,
        pub secondary_value_font_configuration: Option<Box<FontConfiguration_>>,
        pub sparkline: Option<Box<KPISparklineOptions_>>,
        pub trend_arrows: Option<Box<TrendArrowOptions_>>,
        pub visual_layout_options: Option<Box<KPIVisualLayoutOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIOptions as KPIOptions;
    impl crate::value::ToValue for KPIOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.comparison {
                properties.insert(
                    "Comparison".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_display_type {
                properties.insert(
                    "PrimaryValueDisplayType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_value_font_configuration {
                properties.insert(
                    "PrimaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.progress_bar {
                properties.insert(
                    "ProgressBar".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_value {
                properties.insert(
                    "SecondaryValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_value_font_configuration {
                properties.insert(
                    "SecondaryValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sparkline {
                properties.insert(
                    "Sparkline".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.trend_arrows {
                properties.insert(
                    "TrendArrows".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_layout_options {
                properties.insert(
                    "VisualLayoutOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpiprimaryvalueconditionalformatting.html
    pub struct KPIPrimaryValueConditionalFormatting_ {
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIPrimaryValueConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIPrimaryValueConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIPrimaryValueConditionalFormatting as KPIPrimaryValueConditionalFormatting;
    impl crate::value::ToValue for KPIPrimaryValueConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpiprogressbarconditionalformatting.html
    pub struct KPIProgressBarConditionalFormatting_ {
        pub foreground_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIProgressBarConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIProgressBarConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIProgressBarConditionalFormatting as KPIProgressBarConditionalFormatting;
    impl crate::value::ToValue for KPIProgressBarConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.foreground_color {
                properties.insert(
                    "ForegroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpisortconfiguration.html
    pub struct KPISortConfiguration_ {
        pub trend_group_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPISortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPISortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPISortConfiguration as KPISortConfiguration;
    impl crate::value::ToValue for KPISortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.trend_group_sort {
                properties.insert(
                    "TrendGroupSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpisparklineoptions.html
    pub struct KPISparklineOptions_ {
        pub color: Option<crate::value::ExpString>,
        pub tooltip_visibility: Option<serde_json::Value>,
        pub r#type: crate::value::ExpString,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPISparklineOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPISparklineOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPISparklineOptions as KPISparklineOptions;
    impl crate::value::ToValue for KPISparklineOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tooltip_visibility {
                properties.insert(
                    "TooltipVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpivisual.html
    pub struct KPIVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<KPIConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub conditional_formatting: Option<Box<KPIConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIVisual as KPIVisual;
    impl crate::value::ToValue for KPIVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpivisuallayoutoptions.html
    pub struct KPIVisualLayoutOptions_ {
        pub standard_layout: Option<Box<KPIVisualStandardLayout_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIVisualLayoutOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIVisualLayoutOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIVisualLayoutOptions as KPIVisualLayoutOptions;
    impl crate::value::ToValue for KPIVisualLayoutOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.standard_layout {
                properties.insert(
                    "StandardLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-kpivisualstandardlayout.html
    pub struct KPIVisualStandardLayout_ {
        pub r#type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_KPIVisualStandardLayout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.KPIVisualStandardLayout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_KPIVisualStandardLayout as KPIVisualStandardLayout;
    impl crate::value::ToValue for KPIVisualStandardLayout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-labeloptions.html
    pub struct LabelOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LabelOptions as LabelOptions;
    impl crate::value::ToValue for LabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-layout.html
    pub struct Layout_ {
        pub configuration: Box<LayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Layout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Layout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Layout as Layout;
    impl crate::value::ToValue for Layout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-layoutconfiguration.html
    pub struct LayoutConfiguration_ {
        pub free_form_layout: Option<Box<FreeFormLayoutConfiguration_>>,
        pub grid_layout: Option<Box<GridLayoutConfiguration_>>,
        pub section_based_layout: Option<Box<SectionBasedLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LayoutConfiguration as LayoutConfiguration;
    impl crate::value::ToValue for LayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.free_form_layout {
                properties.insert(
                    "FreeFormLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grid_layout {
                properties.insert(
                    "GridLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.section_based_layout {
                properties.insert(
                    "SectionBasedLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-legendoptions.html
    pub struct LegendOptions_ {
        pub height: Option<crate::value::ExpString>,
        pub position: Option<crate::value::ExpString>,
        pub title: Option<Box<LabelOptions_>>,
        pub value_font_configuration: Option<Box<FontConfiguration_>>,
        pub visibility: Option<serde_json::Value>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LegendOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LegendOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LegendOptions as LegendOptions;
    impl crate::value::ToValue for LegendOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.position {
                properties.insert(
                    "Position".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value_font_configuration {
                properties.insert(
                    "ValueFontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartaggregatedfieldwells.html
    pub struct LineChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub colors: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartAggregatedFieldWells as LineChartAggregatedFieldWells;
    impl crate::value::ToValue for LineChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartconfiguration.html
    pub struct LineChartConfiguration_ {
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub default_series_settings: Option<Box<LineChartDefaultSeriesSettings_>>,
        pub field_wells: Option<Box<LineChartFieldWells_>>,
        pub forecast_configurations: Option<Vec<ForecastConfiguration_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<LineSeriesAxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub reference_lines: Option<Vec<ReferenceLine_>>,
        pub secondary_y_axis_display_options: Option<Box<LineSeriesAxisDisplayOptions_>>,
        pub secondary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub series: Option<Vec<SeriesItem_>>,
        pub single_axis_options: Option<Box<SingleAxisOptions_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<LineChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub r#type: Option<crate::value::ExpString>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartConfiguration as LineChartConfiguration;
    impl crate::value::ToValue for LineChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_series_settings {
                properties.insert(
                    "DefaultSeriesSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.forecast_configurations {
                properties.insert(
                    "ForecastConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.reference_lines {
                properties.insert(
                    "ReferenceLines".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_display_options {
                properties.insert(
                    "SecondaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_y_axis_label_options {
                properties.insert(
                    "SecondaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.series {
                properties.insert("Series".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.single_axis_options {
                properties.insert(
                    "SingleAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartdefaultseriessettings.html
    pub struct LineChartDefaultSeriesSettings_ {
        pub axis_binding: Option<crate::value::ExpString>,
        pub line_style_settings: Option<Box<LineChartLineStyleSettings_>>,
        pub marker_style_settings: Option<Box<LineChartMarkerStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartDefaultSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartDefaultSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartDefaultSeriesSettings as LineChartDefaultSeriesSettings;
    impl crate::value::ToValue for LineChartDefaultSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_binding {
                properties.insert(
                    "AxisBinding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_style_settings {
                properties.insert(
                    "LineStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_style_settings {
                properties.insert(
                    "MarkerStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartfieldwells.html
    pub struct LineChartFieldWells_ {
        pub line_chart_aggregated_field_wells: Option<Box<LineChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartFieldWells as LineChartFieldWells;
    impl crate::value::ToValue for LineChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_chart_aggregated_field_wells {
                properties.insert(
                    "LineChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartlinestylesettings.html
    pub struct LineChartLineStyleSettings_ {
        pub line_interpolation: Option<crate::value::ExpString>,
        pub line_style: Option<crate::value::ExpString>,
        pub line_visibility: Option<serde_json::Value>,
        pub line_width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartLineStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartLineStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartLineStyleSettings as LineChartLineStyleSettings;
    impl crate::value::ToValue for LineChartLineStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_interpolation {
                properties.insert(
                    "LineInterpolation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_style {
                properties.insert(
                    "LineStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_visibility {
                properties.insert(
                    "LineVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_width {
                properties.insert(
                    "LineWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartmarkerstylesettings.html
    pub struct LineChartMarkerStyleSettings_ {
        pub marker_color: Option<crate::value::ExpString>,
        pub marker_shape: Option<crate::value::ExpString>,
        pub marker_size: Option<crate::value::ExpString>,
        pub marker_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartMarkerStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartMarkerStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartMarkerStyleSettings as LineChartMarkerStyleSettings;
    impl crate::value::ToValue for LineChartMarkerStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.marker_color {
                properties.insert(
                    "MarkerColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_shape {
                properties.insert(
                    "MarkerShape".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_size {
                properties.insert(
                    "MarkerSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_visibility {
                properties.insert(
                    "MarkerVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartseriessettings.html
    pub struct LineChartSeriesSettings_ {
        pub line_style_settings: Option<Box<LineChartLineStyleSettings_>>,
        pub marker_style_settings: Option<Box<LineChartMarkerStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartSeriesSettings as LineChartSeriesSettings;
    impl crate::value::ToValue for LineChartSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.line_style_settings {
                properties.insert(
                    "LineStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.marker_style_settings {
                properties.insert(
                    "MarkerStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartsortconfiguration.html
    pub struct LineChartSortConfiguration_ {
        pub category_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartSortConfiguration as LineChartSortConfiguration;
    impl crate::value::ToValue for LineChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit_configuration {
                properties.insert(
                    "CategoryItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit_configuration {
                properties.insert(
                    "ColorItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-linechartvisual.html
    pub struct LineChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<LineChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineChartVisual as LineChartVisual;
    impl crate::value::ToValue for LineChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-lineseriesaxisdisplayoptions.html
    pub struct LineSeriesAxisDisplayOptions_ {
        pub axis_options: Option<Box<AxisDisplayOptions_>>,
        pub missing_data_configurations: Option<Vec<MissingDataConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LineSeriesAxisDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LineSeriesAxisDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LineSeriesAxisDisplayOptions as LineSeriesAxisDisplayOptions;
    impl crate::value::ToValue for LineSeriesAxisDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_options {
                properties.insert(
                    "AxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.missing_data_configurations {
                properties.insert(
                    "MissingDataConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-listcontroldisplayoptions.html
    pub struct ListControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub search_options: Option<Box<ListControlSearchOptions_>>,
        pub select_all_options: Option<Box<ListControlSelectAllOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ListControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ListControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ListControlDisplayOptions as ListControlDisplayOptions;
    impl crate::value::ToValue for ListControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.search_options {
                properties.insert(
                    "SearchOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-listcontrolsearchoptions.html
    pub struct ListControlSearchOptions_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ListControlSearchOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ListControlSearchOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ListControlSearchOptions as ListControlSearchOptions;
    impl crate::value::ToValue for ListControlSearchOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-listcontrolselectalloptions.html
    pub struct ListControlSelectAllOptions_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ListControlSelectAllOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ListControlSelectAllOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ListControlSelectAllOptions as ListControlSelectAllOptions;
    impl crate::value::ToValue for ListControlSelectAllOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-loadinganimation.html
    pub struct LoadingAnimation_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LoadingAnimation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LoadingAnimation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LoadingAnimation as LoadingAnimation;
    impl crate::value::ToValue for LoadingAnimation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-localnavigationconfiguration.html
    pub struct LocalNavigationConfiguration_ {
        pub target_sheet_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LocalNavigationConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LocalNavigationConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LocalNavigationConfiguration as LocalNavigationConfiguration;
    impl crate::value::ToValue for LocalNavigationConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "TargetSheetId".to_string(),
                crate::value::ToValue::to_value(&self.target_sheet_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-longformattext.html
    pub struct LongFormatText_ {
        pub plain_text: Option<crate::value::ExpString>,
        pub rich_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_LongFormatText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.LongFormatText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_LongFormatText as LongFormatText;
    impl crate::value::ToValue for LongFormatText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rich_text {
                properties.insert(
                    "RichText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-mappeddatasetparameter.html
    pub struct MappedDataSetParameter_ {
        pub data_set_identifier: crate::value::ExpString,
        pub data_set_parameter_name: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MappedDataSetParameter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MappedDataSetParameter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MappedDataSetParameter as MappedDataSetParameter;
    impl crate::value::ToValue for MappedDataSetParameter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataSetIdentifier".to_string(),
                crate::value::ToValue::to_value(&self.data_set_identifier),
            );
            properties.insert(
                "DataSetParameterName".to_string(),
                crate::value::ToValue::to_value(&self.data_set_parameter_name),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-maximumlabeltype.html
    pub struct MaximumLabelType_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MaximumLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MaximumLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MaximumLabelType as MaximumLabelType;
    impl crate::value::ToValue for MaximumLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-maximumminimumcomputation.html
    pub struct MaximumMinimumComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MaximumMinimumComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MaximumMinimumComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MaximumMinimumComputation as MaximumMinimumComputation;
    impl crate::value::ToValue for MaximumMinimumComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-measurefield.html
    pub struct MeasureField_ {
        pub calculated_measure_field: Option<Box<CalculatedMeasureField_>>,
        pub categorical_measure_field: Option<Box<CategoricalMeasureField_>>,
        pub date_measure_field: Option<Box<DateMeasureField_>>,
        pub numerical_measure_field: Option<Box<NumericalMeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MeasureField as MeasureField;
    impl crate::value::ToValue for MeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.calculated_measure_field {
                properties.insert(
                    "CalculatedMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categorical_measure_field {
                properties.insert(
                    "CategoricalMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_measure_field {
                properties.insert(
                    "DateMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numerical_measure_field {
                properties.insert(
                    "NumericalMeasureField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-metriccomparisoncomputation.html
    pub struct MetricComparisonComputation_ {
        pub computation_id: crate::value::ExpString,
        pub from_value: Option<Box<MeasureField_>>,
        pub name: Option<crate::value::ExpString>,
        pub target_value: Option<Box<MeasureField_>>,
        pub time: Option<Box<DimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MetricComparisonComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MetricComparisonComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MetricComparisonComputation as MetricComparisonComputation;
    impl crate::value::ToValue for MetricComparisonComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.from_value {
                properties.insert(
                    "FromValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.target_value {
                properties.insert(
                    "TargetValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-minimumlabeltype.html
    pub struct MinimumLabelType_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MinimumLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MinimumLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MinimumLabelType as MinimumLabelType;
    impl crate::value::ToValue for MinimumLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-missingdataconfiguration.html
    pub struct MissingDataConfiguration_ {
        pub treatment_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_MissingDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.MissingDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_MissingDataConfiguration as MissingDataConfiguration;
    impl crate::value::ToValue for MissingDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.treatment_option {
                properties.insert(
                    "TreatmentOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-negativevalueconfiguration.html
    pub struct NegativeValueConfiguration_ {
        pub display_mode: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NegativeValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NegativeValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NegativeValueConfiguration as NegativeValueConfiguration;
    impl crate::value::ToValue for NegativeValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DisplayMode".to_string(),
                crate::value::ToValue::to_value(&self.display_mode),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-nestedfilter.html
    pub struct NestedFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub filter_id: crate::value::ExpString,
        pub include_inner_set: crate::value::ExpBool,
        pub inner_filter: Box<InnerFilter_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NestedFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NestedFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NestedFilter as NestedFilter;
    impl crate::value::ToValue for NestedFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.insert(
                "IncludeInnerSet".to_string(),
                crate::value::ToValue::to_value(&self.include_inner_set),
            );
            properties.insert(
                "InnerFilter".to_string(),
                crate::value::ToValue::to_value(&self.inner_filter),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-nullvalueformatconfiguration.html
    pub struct NullValueFormatConfiguration_ {
        pub null_string: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NullValueFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NullValueFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NullValueFormatConfiguration as NullValueFormatConfiguration;
    impl crate::value::ToValue for NullValueFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "NullString".to_string(),
                crate::value::ToValue::to_value(&self.null_string),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numberdisplayformatconfiguration.html
    pub struct NumberDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub number_scale: Option<crate::value::ExpString>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumberDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumberDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumberDisplayFormatConfiguration as NumberDisplayFormatConfiguration;
    impl crate::value::ToValue for NumberDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_scale {
                properties.insert(
                    "NumberScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numberformatconfiguration.html
    pub struct NumberFormatConfiguration_ {
        pub format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumberFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumberFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumberFormatConfiguration as NumberFormatConfiguration;
    impl crate::value::ToValue for NumberFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericaxisoptions.html
    pub struct NumericAxisOptions_ {
        pub range: Option<Box<AxisDisplayRange_>>,
        pub scale: Option<Box<AxisScale_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericAxisOptions as NumericAxisOptions;
    impl crate::value::ToValue for NumericAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.range {
                properties.insert("Range".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.scale {
                properties.insert("Scale".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericequalitydrilldownfilter.html
    pub struct NumericEqualityDrillDownFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericEqualityDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericEqualityDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericEqualityDrillDownFilter as NumericEqualityDrillDownFilter;
    impl crate::value::ToValue for NumericEqualityDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericequalityfilter.html
    pub struct NumericEqualityFilter_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub match_operator: crate::value::ExpString,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub select_all_options: Option<crate::value::ExpString>,
        pub value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericEqualityFilter as NumericEqualityFilter;
    impl crate::value::ToValue for NumericEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            properties.insert(
                "MatchOperator".to_string(),
                crate::value::ToValue::to_value(&self.match_operator),
            );
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericformatconfiguration.html
    pub struct NumericFormatConfiguration_ {
        pub currency_display_format_configuration: Option<Box<CurrencyDisplayFormatConfiguration_>>,
        pub number_display_format_configuration: Option<Box<NumberDisplayFormatConfiguration_>>,
        pub percentage_display_format_configuration:
            Option<Box<PercentageDisplayFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericFormatConfiguration as NumericFormatConfiguration;
    impl crate::value::ToValue for NumericFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.currency_display_format_configuration {
                properties.insert(
                    "CurrencyDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.number_display_format_configuration {
                properties.insert(
                    "NumberDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.percentage_display_format_configuration {
                properties.insert(
                    "PercentageDisplayFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericrangefilter.html
    pub struct NumericRangeFilter_ {
        pub aggregation_function: Option<Box<AggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub null_option: crate::value::ExpString,
        pub range_maximum: Option<Box<NumericRangeFilterValue_>>,
        pub range_minimum: Option<Box<NumericRangeFilterValue_>>,
        pub select_all_options: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericRangeFilter as NumericRangeFilter;
    impl crate::value::ToValue for NumericRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.range_maximum {
                properties.insert(
                    "RangeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum {
                properties.insert(
                    "RangeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.select_all_options {
                properties.insert(
                    "SelectAllOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericrangefiltervalue.html
    pub struct NumericRangeFilterValue_ {
        pub parameter: Option<crate::value::ExpString>,
        pub static_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericRangeFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericRangeFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericRangeFilterValue as NumericRangeFilterValue;
    impl crate::value::ToValue for NumericRangeFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.parameter {
                properties.insert(
                    "Parameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericseparatorconfiguration.html
    pub struct NumericSeparatorConfiguration_ {
        pub decimal_separator: Option<crate::value::ExpString>,
        pub thousands_separator: Option<Box<ThousandSeparatorOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericSeparatorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericSeparatorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericSeparatorConfiguration as NumericSeparatorConfiguration;
    impl crate::value::ToValue for NumericSeparatorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_separator {
                properties.insert(
                    "DecimalSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.thousands_separator {
                properties.insert(
                    "ThousandsSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericalaggregationfunction.html
    pub struct NumericalAggregationFunction_ {
        pub percentile_aggregation: Option<Box<PercentileAggregation_>>,
        pub simple_numerical_aggregation: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericalAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericalAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericalAggregationFunction as NumericalAggregationFunction;
    impl crate::value::ToValue for NumericalAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percentile_aggregation {
                properties.insert(
                    "PercentileAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.simple_numerical_aggregation {
                properties.insert(
                    "SimpleNumericalAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericaldimensionfield.html
    pub struct NumericalDimensionField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<NumberFormatConfiguration_>>,
        pub hierarchy_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericalDimensionField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericalDimensionField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericalDimensionField as NumericalDimensionField;
    impl crate::value::ToValue for NumericalDimensionField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.hierarchy_id {
                properties.insert(
                    "HierarchyId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-numericalmeasurefield.html
    pub struct NumericalMeasureField_ {
        pub aggregation_function: Option<Box<NumericalAggregationFunction_>>,
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<NumberFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_NumericalMeasureField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.NumericalMeasureField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_NumericalMeasureField as NumericalMeasureField;
    impl crate::value::ToValue for NumericalMeasureField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation_function {
                properties.insert(
                    "AggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-paginationconfiguration.html
    pub struct PaginationConfiguration_ {
        pub page_number: f64,
        pub page_size: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PaginationConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PaginationConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PaginationConfiguration as PaginationConfiguration;
    impl crate::value::ToValue for PaginationConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "PageNumber".to_string(),
                crate::value::ToValue::to_value(&self.page_number),
            );
            properties.insert(
                "PageSize".to_string(),
                crate::value::ToValue::to_value(&self.page_size),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-panelconfiguration.html
    pub struct PanelConfiguration_ {
        pub background_color: Option<crate::value::ExpString>,
        pub background_visibility: Option<serde_json::Value>,
        pub border_color: Option<crate::value::ExpString>,
        pub border_style: Option<crate::value::ExpString>,
        pub border_thickness: Option<crate::value::ExpString>,
        pub border_visibility: Option<serde_json::Value>,
        pub gutter_spacing: Option<crate::value::ExpString>,
        pub gutter_visibility: Option<serde_json::Value>,
        pub title: Option<Box<PanelTitleOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PanelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PanelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PanelConfiguration as PanelConfiguration;
    impl crate::value::ToValue for PanelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.background_visibility {
                properties.insert(
                    "BackgroundVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_color {
                properties.insert(
                    "BorderColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_style {
                properties.insert(
                    "BorderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_thickness {
                properties.insert(
                    "BorderThickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border_visibility {
                properties.insert(
                    "BorderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gutter_spacing {
                properties.insert(
                    "GutterSpacing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gutter_visibility {
                properties.insert(
                    "GutterVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-paneltitleoptions.html
    pub struct PanelTitleOptions_ {
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub horizontal_text_alignment: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PanelTitleOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PanelTitleOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PanelTitleOptions as PanelTitleOptions;
    impl crate::value::ToValue for PanelTitleOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.horizontal_text_alignment {
                properties.insert(
                    "HorizontalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parametercontrol.html
    pub struct ParameterControl_ {
        pub date_time_picker: Option<Box<ParameterDateTimePickerControl_>>,
        pub dropdown: Option<Box<ParameterDropDownControl_>>,
        pub list: Option<Box<ParameterListControl_>>,
        pub slider: Option<Box<ParameterSliderControl_>>,
        pub text_area: Option<Box<ParameterTextAreaControl_>>,
        pub text_field: Option<Box<ParameterTextFieldControl_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterControl as ParameterControl;
    impl crate::value::ToValue for ParameterControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_picker {
                properties.insert(
                    "DateTimePicker".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dropdown {
                properties.insert(
                    "Dropdown".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.list {
                properties.insert("List".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.slider {
                properties.insert("Slider".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_area {
                properties.insert(
                    "TextArea".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_field {
                properties.insert(
                    "TextField".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parameterdatetimepickercontrol.html
    pub struct ParameterDateTimePickerControl_ {
        pub display_options: Option<Box<DateTimePickerControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterDateTimePickerControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterDateTimePickerControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterDateTimePickerControl as ParameterDateTimePickerControl;
    impl crate::value::ToValue for ParameterDateTimePickerControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parameterdeclaration.html
    pub struct ParameterDeclaration_ {
        pub date_time_parameter_declaration: Option<Box<DateTimeParameterDeclaration_>>,
        pub decimal_parameter_declaration: Option<Box<DecimalParameterDeclaration_>>,
        pub integer_parameter_declaration: Option<Box<IntegerParameterDeclaration_>>,
        pub string_parameter_declaration: Option<Box<StringParameterDeclaration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterDeclaration as ParameterDeclaration;
    impl crate::value::ToValue for ParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_parameter_declaration {
                properties.insert(
                    "DateTimeParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_parameter_declaration {
                properties.insert(
                    "DecimalParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.integer_parameter_declaration {
                properties.insert(
                    "IntegerParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.string_parameter_declaration {
                properties.insert(
                    "StringParameterDeclaration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parameterdropdowncontrol.html
    pub struct ParameterDropDownControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub commit_mode: Option<crate::value::ExpString>,
        pub display_options: Option<Box<DropDownControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<ParameterSelectableValues_>>,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterDropDownControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterDropDownControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterDropDownControl as ParameterDropDownControl;
    impl crate::value::ToValue for ParameterDropDownControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.commit_mode {
                properties.insert(
                    "CommitMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parameterlistcontrol.html
    pub struct ParameterListControl_ {
        pub cascading_control_configuration: Option<Box<CascadingControlConfiguration_>>,
        pub display_options: Option<Box<ListControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub selectable_values: Option<Box<ParameterSelectableValues_>>,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterListControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterListControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterListControl as ParameterListControl;
    impl crate::value::ToValue for ParameterListControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cascading_control_configuration {
                properties.insert(
                    "CascadingControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            if let Some(ref value) = self.selectable_values {
                properties.insert(
                    "SelectableValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parameterselectablevalues.html
    pub struct ParameterSelectableValues_ {
        pub link_to_data_set_column: Option<Box<ColumnIdentifier_>>,
        pub values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterSelectableValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterSelectableValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterSelectableValues as ParameterSelectableValues;
    impl crate::value::ToValue for ParameterSelectableValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.link_to_data_set_column {
                properties.insert(
                    "LinkToDataSetColumn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parameterslidercontrol.html
    pub struct ParameterSliderControl_ {
        pub display_options: Option<Box<SliderControlDisplayOptions_>>,
        pub maximum_value: f64,
        pub minimum_value: f64,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub step_size: f64,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterSliderControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterSliderControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterSliderControl as ParameterSliderControl;
    impl crate::value::ToValue for ParameterSliderControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "MaximumValue".to_string(),
                crate::value::ToValue::to_value(&self.maximum_value),
            );
            properties.insert(
                "MinimumValue".to_string(),
                crate::value::ToValue::to_value(&self.minimum_value),
            );
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "StepSize".to_string(),
                crate::value::ToValue::to_value(&self.step_size),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parametertextareacontrol.html
    pub struct ParameterTextAreaControl_ {
        pub delimiter: Option<crate::value::ExpString>,
        pub display_options: Option<Box<TextAreaControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterTextAreaControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterTextAreaControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterTextAreaControl as ParameterTextAreaControl;
    impl crate::value::ToValue for ParameterTextAreaControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.delimiter {
                properties.insert(
                    "Delimiter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-parametertextfieldcontrol.html
    pub struct ParameterTextFieldControl_ {
        pub display_options: Option<Box<TextFieldControlDisplayOptions_>>,
        pub parameter_control_id: crate::value::ExpString,
        pub source_parameter_name: crate::value::ExpString,
        pub title: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ParameterTextFieldControl {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ParameterTextFieldControl"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ParameterTextFieldControl as ParameterTextFieldControl;
    impl crate::value::ToValue for ParameterTextFieldControl_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_options {
                properties.insert(
                    "DisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ParameterControlId".to_string(),
                crate::value::ToValue::to_value(&self.parameter_control_id),
            );
            properties.insert(
                "SourceParameterName".to_string(),
                crate::value::ToValue::to_value(&self.source_parameter_name),
            );
            properties.insert(
                "Title".to_string(),
                crate::value::ToValue::to_value(&self.title),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-percentvisiblerange.html
    pub struct PercentVisibleRange_ {
        pub from: Option<f64>,
        pub to: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PercentVisibleRange {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PercentVisibleRange"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PercentVisibleRange as PercentVisibleRange;
    impl crate::value::ToValue for PercentVisibleRange_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.from {
                properties.insert("From".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.to {
                properties.insert("To".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-percentagedisplayformatconfiguration.html
    pub struct PercentageDisplayFormatConfiguration_ {
        pub decimal_places_configuration: Option<Box<DecimalPlacesConfiguration_>>,
        pub negative_value_configuration: Option<Box<NegativeValueConfiguration_>>,
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub prefix: Option<crate::value::ExpString>,
        pub separator_configuration: Option<Box<NumericSeparatorConfiguration_>>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PercentageDisplayFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PercentageDisplayFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PercentageDisplayFormatConfiguration as PercentageDisplayFormatConfiguration;
    impl crate::value::ToValue for PercentageDisplayFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.decimal_places_configuration {
                properties.insert(
                    "DecimalPlacesConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_value_configuration {
                properties.insert(
                    "NegativeValueConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.separator_configuration {
                properties.insert(
                    "SeparatorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-percentileaggregation.html
    pub struct PercentileAggregation_ {
        pub percentile_value: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PercentileAggregation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PercentileAggregation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PercentileAggregation as PercentileAggregation;
    impl crate::value::ToValue for PercentileAggregation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percentile_value {
                properties.insert(
                    "PercentileValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-periodoverperiodcomputation.html
    pub struct PeriodOverPeriodComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PeriodOverPeriodComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PeriodOverPeriodComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PeriodOverPeriodComputation as PeriodOverPeriodComputation;
    impl crate::value::ToValue for PeriodOverPeriodComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-periodtodatecomputation.html
    pub struct PeriodToDateComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub period_time_granularity: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PeriodToDateComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PeriodToDateComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PeriodToDateComputation as PeriodToDateComputation;
    impl crate::value::ToValue for PeriodToDateComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.period_time_granularity {
                properties.insert(
                    "PeriodTimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-piechartaggregatedfieldwells.html
    pub struct PieChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub small_multiples: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PieChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PieChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PieChartAggregatedFieldWells as PieChartAggregatedFieldWells;
    impl crate::value::ToValue for PieChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples {
                properties.insert(
                    "SmallMultiples".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-piechartconfiguration.html
    pub struct PieChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub contribution_analysis_defaults: Option<Vec<ContributionAnalysisDefault_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub donut_options: Option<Box<DonutOptions_>>,
        pub field_wells: Option<Box<PieChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub small_multiples_options: Option<Box<SmallMultiplesOptions_>>,
        pub sort_configuration: Option<Box<PieChartSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub value_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PieChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PieChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PieChartConfiguration as PieChartConfiguration;
    impl crate::value::ToValue for PieChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.contribution_analysis_defaults {
                properties.insert(
                    "ContributionAnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.donut_options {
                properties.insert(
                    "DonutOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.small_multiples_options {
                properties.insert(
                    "SmallMultiplesOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_options {
                properties.insert(
                    "ValueLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-piechartfieldwells.html
    pub struct PieChartFieldWells_ {
        pub pie_chart_aggregated_field_wells: Option<Box<PieChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PieChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PieChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PieChartFieldWells as PieChartFieldWells;
    impl crate::value::ToValue for PieChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pie_chart_aggregated_field_wells {
                properties.insert(
                    "PieChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-piechartsortconfiguration.html
    pub struct PieChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub small_multiples_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub small_multiples_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PieChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PieChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PieChartSortConfiguration as PieChartSortConfiguration;
    impl crate::value::ToValue for PieChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_limit_configuration {
                properties.insert(
                    "SmallMultiplesLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.small_multiples_sort {
                properties.insert(
                    "SmallMultiplesSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-piechartvisual.html
    pub struct PieChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<PieChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PieChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PieChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PieChartVisual as PieChartVisual;
    impl crate::value::ToValue for PieChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivotfieldsortoptions.html
    pub struct PivotFieldSortOptions_ {
        pub field_id: crate::value::ExpString,
        pub sort_by: Box<PivotTableSortBy_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotFieldSortOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotFieldSortOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotFieldSortOptions as PivotFieldSortOptions;
    impl crate::value::ToValue for PivotFieldSortOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.insert(
                "SortBy".to_string(),
                crate::value::ToValue::to_value(&self.sort_by),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottableaggregatedfieldwells.html
    pub struct PivotTableAggregatedFieldWells_ {
        pub columns: Option<Vec<DimensionField_>>,
        pub rows: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableAggregatedFieldWells as PivotTableAggregatedFieldWells;
    impl crate::value::ToValue for PivotTableAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows {
                properties.insert("Rows".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablecellconditionalformatting.html
    pub struct PivotTableCellConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub scope: Option<Box<PivotTableConditionalFormattingScope_>>,
        pub scopes: Option<Vec<PivotTableConditionalFormattingScope_>>,
        pub text_format: Option<Box<TextConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableCellConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableCellConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableCellConditionalFormatting as PivotTableCellConditionalFormatting;
    impl crate::value::ToValue for PivotTableCellConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.scope {
                properties.insert("Scope".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.scopes {
                properties.insert("Scopes".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_format {
                properties.insert(
                    "TextFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottableconditionalformatting.html
    pub struct PivotTableConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<PivotTableConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableConditionalFormatting as PivotTableConditionalFormatting;
    impl crate::value::ToValue for PivotTableConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottableconditionalformattingoption.html
    pub struct PivotTableConditionalFormattingOption_ {
        pub cell: Option<Box<PivotTableCellConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableConditionalFormattingOption as PivotTableConditionalFormattingOption;
    impl crate::value::ToValue for PivotTableConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell {
                properties.insert("Cell".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottableconditionalformattingscope.html
    pub struct PivotTableConditionalFormattingScope_ {
        pub role: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableConditionalFormattingScope {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableConditionalFormattingScope"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableConditionalFormattingScope as PivotTableConditionalFormattingScope;
    impl crate::value::ToValue for PivotTableConditionalFormattingScope_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.role {
                properties.insert("Role".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottableconfiguration.html
    pub struct PivotTableConfiguration_ {
        pub field_options: Option<Box<PivotTableFieldOptions_>>,
        pub field_wells: Option<Box<PivotTableFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub paginated_report_options: Option<Box<PivotTablePaginatedReportOptions_>>,
        pub sort_configuration: Option<Box<PivotTableSortConfiguration_>>,
        pub table_options: Option<Box<PivotTableOptions_>>,
        pub total_options: Option<Box<PivotTableTotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableConfiguration as PivotTableConfiguration;
    impl crate::value::ToValue for PivotTableConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_options {
                properties.insert(
                    "FieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_report_options {
                properties.insert(
                    "PaginatedReportOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_options {
                properties.insert(
                    "TableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_options {
                properties.insert(
                    "TotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottabledatapathoption.html
    pub struct PivotTableDataPathOption_ {
        pub data_path_list: Vec<DataPathValue_>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableDataPathOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableDataPathOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableDataPathOption as PivotTableDataPathOption;
    impl crate::value::ToValue for PivotTableDataPathOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataPathList".to_string(),
                crate::value::ToValue::to_value(&self.data_path_list),
            );
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablefieldcollapsestateoption.html
    pub struct PivotTableFieldCollapseStateOption_ {
        pub state: Option<crate::value::ExpString>,
        pub target: Box<PivotTableFieldCollapseStateTarget_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableFieldCollapseStateOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableFieldCollapseStateOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableFieldCollapseStateOption as PivotTableFieldCollapseStateOption;
    impl crate::value::ToValue for PivotTableFieldCollapseStateOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.state {
                properties.insert("State".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Target".to_string(),
                crate::value::ToValue::to_value(&self.target),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablefieldcollapsestatetarget.html
    pub struct PivotTableFieldCollapseStateTarget_ {
        pub field_data_path_values: Option<Vec<DataPathValue_>>,
        pub field_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableFieldCollapseStateTarget {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableFieldCollapseStateTarget"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableFieldCollapseStateTarget as PivotTableFieldCollapseStateTarget;
    impl crate::value::ToValue for PivotTableFieldCollapseStateTarget_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_data_path_values {
                properties.insert(
                    "FieldDataPathValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablefieldoption.html
    pub struct PivotTableFieldOption_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableFieldOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableFieldOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableFieldOption as PivotTableFieldOption;
    impl crate::value::ToValue for PivotTableFieldOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablefieldoptions.html
    pub struct PivotTableFieldOptions_ {
        pub collapse_state_options: Option<Vec<PivotTableFieldCollapseStateOption_>>,
        pub data_path_options: Option<Vec<PivotTableDataPathOption_>>,
        pub selected_field_options: Option<Vec<PivotTableFieldOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableFieldOptions as PivotTableFieldOptions;
    impl crate::value::ToValue for PivotTableFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.collapse_state_options {
                properties.insert(
                    "CollapseStateOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_path_options {
                properties.insert(
                    "DataPathOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablefieldsubtotaloptions.html
    pub struct PivotTableFieldSubtotalOptions_ {
        pub field_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableFieldSubtotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableFieldSubtotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableFieldSubtotalOptions as PivotTableFieldSubtotalOptions;
    impl crate::value::ToValue for PivotTableFieldSubtotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_id {
                properties.insert(
                    "FieldId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablefieldwells.html
    pub struct PivotTableFieldWells_ {
        pub pivot_table_aggregated_field_wells: Option<Box<PivotTableAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableFieldWells as PivotTableFieldWells;
    impl crate::value::ToValue for PivotTableFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pivot_table_aggregated_field_wells {
                properties.insert(
                    "PivotTableAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottableoptions.html
    pub struct PivotTableOptions_ {
        pub cell_style: Option<Box<TableCellStyle_>>,
        pub collapsed_row_dimensions_visibility: Option<serde_json::Value>,
        pub column_header_style: Option<Box<TableCellStyle_>>,
        pub column_names_visibility: Option<serde_json::Value>,
        pub default_cell_width: Option<crate::value::ExpString>,
        pub metric_placement: Option<crate::value::ExpString>,
        pub row_alternate_color_options: Option<Box<RowAlternateColorOptions_>>,
        pub row_field_names_style: Option<Box<TableCellStyle_>>,
        pub row_header_style: Option<Box<TableCellStyle_>>,
        pub rows_label_options: Option<Box<PivotTableRowsLabelOptions_>>,
        pub rows_layout: Option<crate::value::ExpString>,
        pub single_metric_visibility: Option<serde_json::Value>,
        pub toggle_buttons_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableOptions as PivotTableOptions;
    impl crate::value::ToValue for PivotTableOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_style {
                properties.insert(
                    "CellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.collapsed_row_dimensions_visibility {
                properties.insert(
                    "CollapsedRowDimensionsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_header_style {
                properties.insert(
                    "ColumnHeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_names_visibility {
                properties.insert(
                    "ColumnNamesVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_cell_width {
                properties.insert(
                    "DefaultCellWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_placement {
                properties.insert(
                    "MetricPlacement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_alternate_color_options {
                properties.insert(
                    "RowAlternateColorOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_field_names_style {
                properties.insert(
                    "RowFieldNamesStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_header_style {
                properties.insert(
                    "RowHeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows_label_options {
                properties.insert(
                    "RowsLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rows_layout {
                properties.insert(
                    "RowsLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.single_metric_visibility {
                properties.insert(
                    "SingleMetricVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.toggle_buttons_visibility {
                properties.insert(
                    "ToggleButtonsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablepaginatedreportoptions.html
    pub struct PivotTablePaginatedReportOptions_ {
        pub overflow_column_header_visibility: Option<serde_json::Value>,
        pub vertical_overflow_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTablePaginatedReportOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTablePaginatedReportOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTablePaginatedReportOptions as PivotTablePaginatedReportOptions;
    impl crate::value::ToValue for PivotTablePaginatedReportOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.overflow_column_header_visibility {
                properties.insert(
                    "OverflowColumnHeaderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_overflow_visibility {
                properties.insert(
                    "VerticalOverflowVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablerowslabeloptions.html
    pub struct PivotTableRowsLabelOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableRowsLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableRowsLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableRowsLabelOptions as PivotTableRowsLabelOptions;
    impl crate::value::ToValue for PivotTableRowsLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablesortby.html
    pub struct PivotTableSortBy_ {
        pub column: Option<Box<ColumnSort_>>,
        pub data_path: Option<Box<DataPathSort_>>,
        pub field: Option<Box<FieldSort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableSortBy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableSortBy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableSortBy as PivotTableSortBy;
    impl crate::value::ToValue for PivotTableSortBy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column {
                properties.insert("Column".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.data_path {
                properties.insert(
                    "DataPath".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field {
                properties.insert("Field".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablesortconfiguration.html
    pub struct PivotTableSortConfiguration_ {
        pub field_sort_options: Option<Vec<PivotFieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableSortConfiguration as PivotTableSortConfiguration;
    impl crate::value::ToValue for PivotTableSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_sort_options {
                properties.insert(
                    "FieldSortOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottabletotaloptions.html
    pub struct PivotTableTotalOptions_ {
        pub column_subtotal_options: Option<Box<SubtotalOptions_>>,
        pub column_total_options: Option<Box<PivotTotalOptions_>>,
        pub row_subtotal_options: Option<Box<SubtotalOptions_>>,
        pub row_total_options: Option<Box<PivotTotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableTotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableTotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableTotalOptions as PivotTableTotalOptions;
    impl crate::value::ToValue for PivotTableTotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_subtotal_options {
                properties.insert(
                    "ColumnSubtotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_total_options {
                properties.insert(
                    "ColumnTotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_subtotal_options {
                properties.insert(
                    "RowSubtotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_total_options {
                properties.insert(
                    "RowTotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottablevisual.html
    pub struct PivotTableVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<PivotTableConfiguration_>>,
        pub conditional_formatting: Option<Box<PivotTableConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTableVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTableVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTableVisual as PivotTableVisual;
    impl crate::value::ToValue for PivotTableVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pivottotaloptions.html
    pub struct PivotTotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub metric_header_cell_style: Option<Box<TableCellStyle_>>,
        pub placement: Option<crate::value::ExpString>,
        pub scroll_status: Option<crate::value::ExpString>,
        pub total_aggregation_options: Option<Vec<TotalAggregationOption_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<serde_json::Value>,
        pub value_cell_style: Option<Box<TableCellStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PivotTotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PivotTotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PivotTotalOptions as PivotTotalOptions;
    impl crate::value::ToValue for PivotTotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_header_cell_style {
                properties.insert(
                    "MetricHeaderCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scroll_status {
                properties.insert(
                    "ScrollStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation_options {
                properties.insert(
                    "TotalAggregationOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_cell_style {
                properties.insert(
                    "ValueCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisual.html
    pub struct PluginVisual_ {
        pub chart_configuration: Option<Box<PluginVisualConfiguration_>>,
        pub plugin_arn: crate::value::ExpString,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisual as PluginVisual;
    impl crate::value::ToValue for PluginVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "PluginArn".to_string(),
                crate::value::ToValue::to_value(&self.plugin_arn),
            );
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualconfiguration.html
    pub struct PluginVisualConfiguration_ {
        pub field_wells: Option<Vec<PluginVisualFieldWell_>>,
        pub sort_configuration: Option<Box<PluginVisualSortConfiguration_>>,
        pub visual_options: Option<Box<PluginVisualOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualConfiguration as PluginVisualConfiguration;
    impl crate::value::ToValue for PluginVisualConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_options {
                properties.insert(
                    "VisualOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualfieldwell.html
    pub struct PluginVisualFieldWell_ {
        pub axis_name: Option<crate::value::ExpString>,
        pub dimensions: Option<Vec<DimensionField_>>,
        pub measures: Option<Vec<MeasureField_>>,
        pub unaggregated: Option<Vec<UnaggregatedField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualFieldWell {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualFieldWell"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualFieldWell as PluginVisualFieldWell;
    impl crate::value::ToValue for PluginVisualFieldWell_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_name {
                properties.insert(
                    "AxisName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dimensions {
                properties.insert(
                    "Dimensions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measures {
                properties.insert(
                    "Measures".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.unaggregated {
                properties.insert(
                    "Unaggregated".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualitemslimitconfiguration.html
    pub struct PluginVisualItemsLimitConfiguration_ {
        pub items_limit: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualItemsLimitConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualItemsLimitConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualItemsLimitConfiguration as PluginVisualItemsLimitConfiguration;
    impl crate::value::ToValue for PluginVisualItemsLimitConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit {
                properties.insert(
                    "ItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualoptions.html
    pub struct PluginVisualOptions_ {
        pub visual_properties: Option<Vec<PluginVisualProperty_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualOptions as PluginVisualOptions;
    impl crate::value::ToValue for PluginVisualOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visual_properties {
                properties.insert(
                    "VisualProperties".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualproperty.html
    pub struct PluginVisualProperty_ {
        pub name: Option<crate::value::ExpString>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualProperty {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualProperty"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualProperty as PluginVisualProperty;
    impl crate::value::ToValue for PluginVisualProperty_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualsortconfiguration.html
    pub struct PluginVisualSortConfiguration_ {
        pub plugin_visual_table_query_sort: Option<Box<PluginVisualTableQuerySort_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualSortConfiguration as PluginVisualSortConfiguration;
    impl crate::value::ToValue for PluginVisualSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plugin_visual_table_query_sort {
                properties.insert(
                    "PluginVisualTableQuerySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-pluginvisualtablequerysort.html
    pub struct PluginVisualTableQuerySort_ {
        pub items_limit_configuration: Option<Box<PluginVisualItemsLimitConfiguration_>>,
        pub row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PluginVisualTableQuerySort {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PluginVisualTableQuerySort"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PluginVisualTableQuerySort as PluginVisualTableQuerySort;
    impl crate::value::ToValue for PluginVisualTableQuerySort_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.items_limit_configuration {
                properties.insert(
                    "ItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_sort {
                properties.insert(
                    "RowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-predefinedhierarchy.html
    pub struct PredefinedHierarchy_ {
        pub columns: Vec<ColumnIdentifier_>,
        pub drill_down_filters: Option<Vec<DrillDownFilter_>>,
        pub hierarchy_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_PredefinedHierarchy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.PredefinedHierarchy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_PredefinedHierarchy as PredefinedHierarchy;
    impl crate::value::ToValue for PredefinedHierarchy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Columns".to_string(),
                crate::value::ToValue::to_value(&self.columns),
            );
            if let Some(ref value) = self.drill_down_filters {
                properties.insert(
                    "DrillDownFilters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "HierarchyId".to_string(),
                crate::value::ToValue::to_value(&self.hierarchy_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-progressbaroptions.html
    pub struct ProgressBarOptions_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ProgressBarOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ProgressBarOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ProgressBarOptions as ProgressBarOptions;
    impl crate::value::ToValue for ProgressBarOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-queryexecutionoptions.html
    pub struct QueryExecutionOptions_ {
        pub query_execution_mode: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_QueryExecutionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.QueryExecutionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_QueryExecutionOptions as QueryExecutionOptions;
    impl crate::value::ToValue for QueryExecutionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.query_execution_mode {
                properties.insert(
                    "QueryExecutionMode".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartaggregatedfieldwells.html
    pub struct RadarChartAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub color: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartAggregatedFieldWells as RadarChartAggregatedFieldWells;
    impl crate::value::ToValue for RadarChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartareastylesettings.html
    pub struct RadarChartAreaStyleSettings_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartAreaStyleSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartAreaStyleSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartAreaStyleSettings as RadarChartAreaStyleSettings;
    impl crate::value::ToValue for RadarChartAreaStyleSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartconfiguration.html
    pub struct RadarChartConfiguration_ {
        pub alternate_band_colors_visibility: Option<serde_json::Value>,
        pub alternate_band_even_color: Option<crate::value::ExpString>,
        pub alternate_band_odd_color: Option<crate::value::ExpString>,
        pub axes_range_scale: Option<crate::value::ExpString>,
        pub base_series_settings: Option<Box<RadarChartSeriesSettings_>>,
        pub category_axis: Option<Box<AxisDisplayOptions_>>,
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_axis: Option<Box<AxisDisplayOptions_>>,
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<RadarChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub shape: Option<crate::value::ExpString>,
        pub sort_configuration: Option<Box<RadarChartSortConfiguration_>>,
        pub start_angle: Option<f64>,
        pub visual_palette: Option<Box<VisualPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartConfiguration as RadarChartConfiguration;
    impl crate::value::ToValue for RadarChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.alternate_band_colors_visibility {
                properties.insert(
                    "AlternateBandColorsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.alternate_band_even_color {
                properties.insert(
                    "AlternateBandEvenColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.alternate_band_odd_color {
                properties.insert(
                    "AlternateBandOddColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.axes_range_scale {
                properties.insert(
                    "AxesRangeScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.base_series_settings {
                properties.insert(
                    "BaseSeriesSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis {
                properties.insert(
                    "CategoryAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_axis {
                properties.insert(
                    "ColorAxis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.shape {
                properties.insert("Shape".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.start_angle {
                properties.insert(
                    "StartAngle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartfieldwells.html
    pub struct RadarChartFieldWells_ {
        pub radar_chart_aggregated_field_wells: Option<Box<RadarChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartFieldWells as RadarChartFieldWells;
    impl crate::value::ToValue for RadarChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.radar_chart_aggregated_field_wells {
                properties.insert(
                    "RadarChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartseriessettings.html
    pub struct RadarChartSeriesSettings_ {
        pub area_style_settings: Option<Box<RadarChartAreaStyleSettings_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartSeriesSettings {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartSeriesSettings"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartSeriesSettings as RadarChartSeriesSettings;
    impl crate::value::ToValue for RadarChartSeriesSettings_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.area_style_settings {
                properties.insert(
                    "AreaStyleSettings".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartsortconfiguration.html
    pub struct RadarChartSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
        pub color_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub color_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartSortConfiguration as RadarChartSortConfiguration;
    impl crate::value::ToValue for RadarChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_items_limit {
                properties.insert(
                    "ColorItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_sort {
                properties.insert(
                    "ColorSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-radarchartvisual.html
    pub struct RadarChartVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<RadarChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RadarChartVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RadarChartVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RadarChartVisual as RadarChartVisual;
    impl crate::value::ToValue for RadarChartVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-rangeendslabeltype.html
    pub struct RangeEndsLabelType_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RangeEndsLabelType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RangeEndsLabelType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RangeEndsLabelType as RangeEndsLabelType;
    impl crate::value::ToValue for RangeEndsLabelType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referenceline.html
    pub struct ReferenceLine_ {
        pub data_configuration: Box<ReferenceLineDataConfiguration_>,
        pub label_configuration: Option<Box<ReferenceLineLabelConfiguration_>>,
        pub status: Option<crate::value::ExpString>,
        pub style_configuration: Option<Box<ReferenceLineStyleConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLine {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLine"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLine as ReferenceLine;
    impl crate::value::ToValue for ReferenceLine_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DataConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.data_configuration),
            );
            if let Some(ref value) = self.label_configuration {
                properties.insert(
                    "LabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.style_configuration {
                properties.insert(
                    "StyleConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinecustomlabelconfiguration.html
    pub struct ReferenceLineCustomLabelConfiguration_ {
        pub custom_label: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineCustomLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineCustomLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineCustomLabelConfiguration as ReferenceLineCustomLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineCustomLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomLabel".to_string(),
                crate::value::ToValue::to_value(&self.custom_label),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinedataconfiguration.html
    pub struct ReferenceLineDataConfiguration_ {
        pub axis_binding: Option<crate::value::ExpString>,
        pub dynamic_configuration: Option<Box<ReferenceLineDynamicDataConfiguration_>>,
        pub series_type: Option<crate::value::ExpString>,
        pub static_configuration: Option<Box<ReferenceLineStaticDataConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineDataConfiguration as ReferenceLineDataConfiguration;
    impl crate::value::ToValue for ReferenceLineDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.axis_binding {
                properties.insert(
                    "AxisBinding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dynamic_configuration {
                properties.insert(
                    "DynamicConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.series_type {
                properties.insert(
                    "SeriesType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_configuration {
                properties.insert(
                    "StaticConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinedynamicdataconfiguration.html
    pub struct ReferenceLineDynamicDataConfiguration_ {
        pub calculation: Box<NumericalAggregationFunction_>,
        pub column: Box<ColumnIdentifier_>,
        pub measure_aggregation_function: Option<Box<AggregationFunction_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineDynamicDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineDynamicDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineDynamicDataConfiguration as ReferenceLineDynamicDataConfiguration;
    impl crate::value::ToValue for ReferenceLineDynamicDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Calculation".to_string(),
                crate::value::ToValue::to_value(&self.calculation),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.measure_aggregation_function {
                properties.insert(
                    "MeasureAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinelabelconfiguration.html
    pub struct ReferenceLineLabelConfiguration_ {
        pub custom_label_configuration: Option<Box<ReferenceLineCustomLabelConfiguration_>>,
        pub font_color: Option<crate::value::ExpString>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub horizontal_position: Option<crate::value::ExpString>,
        pub value_label_configuration: Option<Box<ReferenceLineValueLabelConfiguration_>>,
        pub vertical_position: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineLabelConfiguration as ReferenceLineLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label_configuration {
                properties.insert(
                    "CustomLabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_color {
                properties.insert(
                    "FontColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.horizontal_position {
                properties.insert(
                    "HorizontalPosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_label_configuration {
                properties.insert(
                    "ValueLabelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_position {
                properties.insert(
                    "VerticalPosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinestaticdataconfiguration.html
    pub struct ReferenceLineStaticDataConfiguration_ {
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineStaticDataConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineStaticDataConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineStaticDataConfiguration as ReferenceLineStaticDataConfiguration;
    impl crate::value::ToValue for ReferenceLineStaticDataConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinestyleconfiguration.html
    pub struct ReferenceLineStyleConfiguration_ {
        pub color: Option<crate::value::ExpString>,
        pub pattern: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineStyleConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineStyleConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineStyleConfiguration as ReferenceLineStyleConfiguration;
    impl crate::value::ToValue for ReferenceLineStyleConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.pattern {
                properties.insert(
                    "Pattern".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-referencelinevaluelabelconfiguration.html
    pub struct ReferenceLineValueLabelConfiguration_ {
        pub format_configuration: Option<Box<NumericFormatConfiguration_>>,
        pub relative_position: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ReferenceLineValueLabelConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ReferenceLineValueLabelConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ReferenceLineValueLabelConfiguration as ReferenceLineValueLabelConfiguration;
    impl crate::value::ToValue for ReferenceLineValueLabelConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_position {
                properties.insert(
                    "RelativePosition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-relativedatetimecontroldisplayoptions.html
    pub struct RelativeDateTimeControlDisplayOptions_ {
        pub date_time_format: Option<crate::value::ExpString>,
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RelativeDateTimeControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RelativeDateTimeControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RelativeDateTimeControlDisplayOptions as RelativeDateTimeControlDisplayOptions;
    impl crate::value::ToValue for RelativeDateTimeControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.date_time_format {
                properties.insert(
                    "DateTimeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-relativedatesfilter.html
    pub struct RelativeDatesFilter_ {
        pub anchor_date_configuration: Box<AnchorDateConfiguration_>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub exclude_period_configuration: Option<Box<ExcludePeriodConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub minimum_granularity: Option<crate::value::ExpString>,
        pub null_option: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub relative_date_type: crate::value::ExpString,
        pub relative_date_value: Option<f64>,
        pub time_granularity: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RelativeDatesFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RelativeDatesFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RelativeDatesFilter as RelativeDatesFilter;
    impl crate::value::ToValue for RelativeDatesFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AnchorDateConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.anchor_date_configuration),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.exclude_period_configuration {
                properties.insert(
                    "ExcludePeriodConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.minimum_granularity {
                properties.insert(
                    "MinimumGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "RelativeDateType".to_string(),
                crate::value::ToValue::to_value(&self.relative_date_type),
            );
            if let Some(ref value) = self.relative_date_value {
                properties.insert(
                    "RelativeDateValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "TimeGranularity".to_string(),
                crate::value::ToValue::to_value(&self.time_granularity),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-rollingdateconfiguration.html
    pub struct RollingDateConfiguration_ {
        pub data_set_identifier: Option<crate::value::ExpString>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RollingDateConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RollingDateConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RollingDateConfiguration as RollingDateConfiguration;
    impl crate::value::ToValue for RollingDateConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_set_identifier {
                properties.insert(
                    "DataSetIdentifier".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-rowalternatecoloroptions.html
    pub struct RowAlternateColorOptions_ {
        pub row_alternate_colors: Option<Vec<crate::value::ExpString>>,
        pub status: Option<crate::value::ExpString>,
        pub use_primary_background_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_RowAlternateColorOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.RowAlternateColorOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_RowAlternateColorOptions as RowAlternateColorOptions;
    impl crate::value::ToValue for RowAlternateColorOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.row_alternate_colors {
                properties.insert(
                    "RowAlternateColors".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.use_primary_background_color {
                properties.insert(
                    "UsePrimaryBackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-samesheettargetvisualconfiguration.html
    pub struct SameSheetTargetVisualConfiguration_ {
        pub target_visual_options: Option<crate::value::ExpString>,
        pub target_visuals: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SameSheetTargetVisualConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SameSheetTargetVisualConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SameSheetTargetVisualConfiguration as SameSheetTargetVisualConfiguration;
    impl crate::value::ToValue for SameSheetTargetVisualConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.target_visual_options {
                properties.insert(
                    "TargetVisualOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.target_visuals {
                properties.insert(
                    "TargetVisuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sankeydiagramaggregatedfieldwells.html
    pub struct SankeyDiagramAggregatedFieldWells_ {
        pub destination: Option<Vec<DimensionField_>>,
        pub source: Option<Vec<DimensionField_>>,
        pub weight: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SankeyDiagramAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SankeyDiagramAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SankeyDiagramAggregatedFieldWells as SankeyDiagramAggregatedFieldWells;
    impl crate::value::ToValue for SankeyDiagramAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.destination {
                properties.insert(
                    "Destination".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source {
                properties.insert("Source".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.weight {
                properties.insert("Weight".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sankeydiagramchartconfiguration.html
    pub struct SankeyDiagramChartConfiguration_ {
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<SankeyDiagramFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<SankeyDiagramSortConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SankeyDiagramChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SankeyDiagramChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SankeyDiagramChartConfiguration as SankeyDiagramChartConfiguration;
    impl crate::value::ToValue for SankeyDiagramChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sankeydiagramfieldwells.html
    pub struct SankeyDiagramFieldWells_ {
        pub sankey_diagram_aggregated_field_wells: Option<Box<SankeyDiagramAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SankeyDiagramFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SankeyDiagramFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SankeyDiagramFieldWells as SankeyDiagramFieldWells;
    impl crate::value::ToValue for SankeyDiagramFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sankey_diagram_aggregated_field_wells {
                properties.insert(
                    "SankeyDiagramAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sankeydiagramsortconfiguration.html
    pub struct SankeyDiagramSortConfiguration_ {
        pub destination_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub source_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub weight_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SankeyDiagramSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SankeyDiagramSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SankeyDiagramSortConfiguration as SankeyDiagramSortConfiguration;
    impl crate::value::ToValue for SankeyDiagramSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.destination_items_limit {
                properties.insert(
                    "DestinationItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_items_limit {
                properties.insert(
                    "SourceItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.weight_sort {
                properties.insert(
                    "WeightSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sankeydiagramvisual.html
    pub struct SankeyDiagramVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<SankeyDiagramChartConfiguration_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SankeyDiagramVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SankeyDiagramVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SankeyDiagramVisual as SankeyDiagramVisual;
    impl crate::value::ToValue for SankeyDiagramVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scatterplotcategoricallyaggregatedfieldwells.html
    pub struct ScatterPlotCategoricallyAggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub label: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
        pub x_axis: Option<Vec<MeasureField_>>,
        pub y_axis: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScatterPlotCategoricallyAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScatterPlotCategoricallyAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScatterPlotCategoricallyAggregatedFieldWells as ScatterPlotCategoricallyAggregatedFieldWells;
    impl crate::value::ToValue for ScatterPlotCategoricallyAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scatterplotconfiguration.html
    pub struct ScatterPlotConfiguration_ {
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<ScatterPlotFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub sort_configuration: Option<Box<ScatterPlotSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub x_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub x_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScatterPlotConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScatterPlotConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScatterPlotConfiguration as ScatterPlotConfiguration;
    impl crate::value::ToValue for ScatterPlotConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_display_options {
                properties.insert(
                    "XAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis_label_options {
                properties.insert(
                    "XAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_display_options {
                properties.insert(
                    "YAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.y_axis_label_options {
                properties.insert(
                    "YAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scatterplotfieldwells.html
    pub struct ScatterPlotFieldWells_ {
        pub scatter_plot_categorically_aggregated_field_wells:
            Option<Box<ScatterPlotCategoricallyAggregatedFieldWells_>>,
        pub scatter_plot_unaggregated_field_wells: Option<Box<ScatterPlotUnaggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScatterPlotFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScatterPlotFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScatterPlotFieldWells as ScatterPlotFieldWells;
    impl crate::value::ToValue for ScatterPlotFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scatter_plot_categorically_aggregated_field_wells {
                properties.insert(
                    "ScatterPlotCategoricallyAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scatter_plot_unaggregated_field_wells {
                properties.insert(
                    "ScatterPlotUnaggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scatterplotsortconfiguration.html
    pub struct ScatterPlotSortConfiguration_ {
        pub scatter_plot_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScatterPlotSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScatterPlotSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScatterPlotSortConfiguration as ScatterPlotSortConfiguration;
    impl crate::value::ToValue for ScatterPlotSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scatter_plot_limit_configuration {
                properties.insert(
                    "ScatterPlotLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scatterplotunaggregatedfieldwells.html
    pub struct ScatterPlotUnaggregatedFieldWells_ {
        pub category: Option<Vec<DimensionField_>>,
        pub label: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
        pub x_axis: Option<Vec<DimensionField_>>,
        pub y_axis: Option<Vec<DimensionField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScatterPlotUnaggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScatterPlotUnaggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScatterPlotUnaggregatedFieldWells as ScatterPlotUnaggregatedFieldWells;
    impl crate::value::ToValue for ScatterPlotUnaggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.label {
                properties.insert("Label".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scatterplotvisual.html
    pub struct ScatterPlotVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<ScatterPlotConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScatterPlotVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScatterPlotVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScatterPlotVisual as ScatterPlotVisual;
    impl crate::value::ToValue for ScatterPlotVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-scrollbaroptions.html
    pub struct ScrollBarOptions_ {
        pub visibility: Option<serde_json::Value>,
        pub visible_range: Option<Box<VisibleRangeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ScrollBarOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ScrollBarOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ScrollBarOptions as ScrollBarOptions;
    impl crate::value::ToValue for ScrollBarOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visible_range {
                properties.insert(
                    "VisibleRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-secondaryvalueoptions.html
    pub struct SecondaryValueOptions_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SecondaryValueOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SecondaryValueOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SecondaryValueOptions as SecondaryValueOptions;
    impl crate::value::ToValue for SecondaryValueOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionafterpagebreak.html
    pub struct SectionAfterPageBreak_ {
        pub status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionAfterPageBreak {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionAfterPageBreak"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionAfterPageBreak as SectionAfterPageBreak;
    impl crate::value::ToValue for SectionAfterPageBreak_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionbasedlayoutcanvassizeoptions.html
    pub struct SectionBasedLayoutCanvasSizeOptions_ {
        pub paper_canvas_size_options: Option<Box<SectionBasedLayoutPaperCanvasSizeOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionBasedLayoutCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionBasedLayoutCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionBasedLayoutCanvasSizeOptions as SectionBasedLayoutCanvasSizeOptions;
    impl crate::value::ToValue for SectionBasedLayoutCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.paper_canvas_size_options {
                properties.insert(
                    "PaperCanvasSizeOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionbasedlayoutconfiguration.html
    pub struct SectionBasedLayoutConfiguration_ {
        pub body_sections: Vec<BodySectionConfiguration_>,
        pub canvas_size_options: Box<SectionBasedLayoutCanvasSizeOptions_>,
        pub footer_sections: Vec<HeaderFooterSectionConfiguration_>,
        pub header_sections: Vec<HeaderFooterSectionConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionBasedLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionBasedLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionBasedLayoutConfiguration as SectionBasedLayoutConfiguration;
    impl crate::value::ToValue for SectionBasedLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BodySections".to_string(),
                crate::value::ToValue::to_value(&self.body_sections),
            );
            properties.insert(
                "CanvasSizeOptions".to_string(),
                crate::value::ToValue::to_value(&self.canvas_size_options),
            );
            properties.insert(
                "FooterSections".to_string(),
                crate::value::ToValue::to_value(&self.footer_sections),
            );
            properties.insert(
                "HeaderSections".to_string(),
                crate::value::ToValue::to_value(&self.header_sections),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionbasedlayoutpapercanvassizeoptions.html
    pub struct SectionBasedLayoutPaperCanvasSizeOptions_ {
        pub paper_margin: Option<Box<Spacing_>>,
        pub paper_orientation: Option<crate::value::ExpString>,
        pub paper_size: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionBasedLayoutPaperCanvasSizeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionBasedLayoutPaperCanvasSizeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionBasedLayoutPaperCanvasSizeOptions as SectionBasedLayoutPaperCanvasSizeOptions;
    impl crate::value::ToValue for SectionBasedLayoutPaperCanvasSizeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.paper_margin {
                properties.insert(
                    "PaperMargin".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paper_orientation {
                properties.insert(
                    "PaperOrientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paper_size {
                properties.insert(
                    "PaperSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionlayoutconfiguration.html
    pub struct SectionLayoutConfiguration_ {
        pub free_form_layout: Box<FreeFormSectionLayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionLayoutConfiguration as SectionLayoutConfiguration;
    impl crate::value::ToValue for SectionLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FreeFormLayout".to_string(),
                crate::value::ToValue::to_value(&self.free_form_layout),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionpagebreakconfiguration.html
    pub struct SectionPageBreakConfiguration_ {
        pub after: Option<Box<SectionAfterPageBreak_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionPageBreakConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionPageBreakConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionPageBreakConfiguration as SectionPageBreakConfiguration;
    impl crate::value::ToValue for SectionPageBreakConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.after {
                properties.insert("After".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sectionstyle.html
    pub struct SectionStyle_ {
        pub height: Option<crate::value::ExpString>,
        pub padding: Option<Box<Spacing_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SectionStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SectionStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SectionStyle as SectionStyle;
    impl crate::value::ToValue for SectionStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.padding {
                properties.insert(
                    "Padding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-selectedsheetsfilterscopeconfiguration.html
    pub struct SelectedSheetsFilterScopeConfiguration_ {
        pub sheet_visual_scoping_configurations: Option<Vec<SheetVisualScopingConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SelectedSheetsFilterScopeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SelectedSheetsFilterScopeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SelectedSheetsFilterScopeConfiguration as SelectedSheetsFilterScopeConfiguration;
    impl crate::value::ToValue for SelectedSheetsFilterScopeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sheet_visual_scoping_configurations {
                properties.insert(
                    "SheetVisualScopingConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-seriesitem.html
    pub struct SeriesItem_ {
        pub data_field_series_item: Option<Box<DataFieldSeriesItem_>>,
        pub field_series_item: Option<Box<FieldSeriesItem_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SeriesItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SeriesItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SeriesItem as SeriesItem;
    impl crate::value::ToValue for SeriesItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_field_series_item {
                properties.insert(
                    "DataFieldSeriesItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_series_item {
                properties.insert(
                    "FieldSeriesItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-setparametervalueconfiguration.html
    pub struct SetParameterValueConfiguration_ {
        pub destination_parameter_name: crate::value::ExpString,
        pub value: Box<DestinationParameterValueConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SetParameterValueConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SetParameterValueConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SetParameterValueConfiguration as SetParameterValueConfiguration;
    impl crate::value::ToValue for SetParameterValueConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "DestinationParameterName".to_string(),
                crate::value::ToValue::to_value(&self.destination_parameter_name),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-shapeconditionalformat.html
    pub struct ShapeConditionalFormat_ {
        pub background_color: Box<ConditionalFormattingColor_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ShapeConditionalFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ShapeConditionalFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ShapeConditionalFormat as ShapeConditionalFormat;
    impl crate::value::ToValue for ShapeConditionalFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "BackgroundColor".to_string(),
                crate::value::ToValue::to_value(&self.background_color),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheet.html
    pub struct Sheet_ {
        pub name: Option<crate::value::ExpString>,
        pub sheet_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Sheet {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Sheet"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Sheet as Sheet;
    impl crate::value::ToValue for Sheet_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sheet_id {
                properties.insert(
                    "SheetId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetcontrolinfoiconlabeloptions.html
    pub struct SheetControlInfoIconLabelOptions_ {
        pub info_icon_text: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetControlInfoIconLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetControlInfoIconLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetControlInfoIconLabelOptions as SheetControlInfoIconLabelOptions;
    impl crate::value::ToValue for SheetControlInfoIconLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_text {
                properties.insert(
                    "InfoIconText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetcontrollayout.html
    pub struct SheetControlLayout_ {
        pub configuration: Box<SheetControlLayoutConfiguration_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetControlLayout {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetControlLayout"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetControlLayout as SheetControlLayout;
    impl crate::value::ToValue for SheetControlLayout_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Configuration".to_string(),
                crate::value::ToValue::to_value(&self.configuration),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetcontrollayoutconfiguration.html
    pub struct SheetControlLayoutConfiguration_ {
        pub grid_layout: Option<Box<GridLayoutConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetControlLayoutConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetControlLayoutConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetControlLayoutConfiguration as SheetControlLayoutConfiguration;
    impl crate::value::ToValue for SheetControlLayoutConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.grid_layout {
                properties.insert(
                    "GridLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetdefinition.html
    pub struct SheetDefinition_ {
        pub content_type: Option<crate::value::ExpString>,
        pub description: Option<crate::value::ExpString>,
        pub filter_controls: Option<Vec<FilterControl_>>,
        pub images: Option<Vec<SheetImage_>>,
        pub layouts: Option<Vec<Layout_>>,
        pub name: Option<crate::value::ExpString>,
        pub parameter_controls: Option<Vec<ParameterControl_>>,
        pub sheet_control_layouts: Option<Vec<SheetControlLayout_>>,
        pub sheet_id: crate::value::ExpString,
        pub text_boxes: Option<Vec<SheetTextBox_>>,
        pub title: Option<crate::value::ExpString>,
        pub visuals: Option<Vec<Visual_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetDefinition as SheetDefinition;
    impl crate::value::ToValue for SheetDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content_type {
                properties.insert(
                    "ContentType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_controls {
                properties.insert(
                    "FilterControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.images {
                properties.insert("Images".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.layouts {
                properties.insert(
                    "Layouts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.parameter_controls {
                properties.insert(
                    "ParameterControls".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet_control_layouts {
                properties.insert(
                    "SheetControlLayouts".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_id),
            );
            if let Some(ref value) = self.text_boxes {
                properties.insert(
                    "TextBoxes".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visuals {
                properties.insert(
                    "Visuals".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetelementconfigurationoverrides.html
    pub struct SheetElementConfigurationOverrides_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetElementConfigurationOverrides {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetElementConfigurationOverrides"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetElementConfigurationOverrides as SheetElementConfigurationOverrides;
    impl crate::value::ToValue for SheetElementConfigurationOverrides_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetelementrenderingrule.html
    pub struct SheetElementRenderingRule_ {
        pub configuration_overrides: Box<SheetElementConfigurationOverrides_>,
        pub expression: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetElementRenderingRule {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetElementRenderingRule"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetElementRenderingRule as SheetElementRenderingRule;
    impl crate::value::ToValue for SheetElementRenderingRule_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ConfigurationOverrides".to_string(),
                crate::value::ToValue::to_value(&self.configuration_overrides),
            );
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetimage.html
    pub struct SheetImage_ {
        pub actions: Option<Vec<ImageCustomAction_>>,
        pub image_content_alt_text: Option<crate::value::ExpString>,
        pub interactions: Option<Box<ImageInteractionOptions_>>,
        pub scaling: Option<Box<SheetImageScalingConfiguration_>>,
        pub sheet_image_id: crate::value::ExpString,
        pub source: Box<SheetImageSource_>,
        pub tooltip: Option<Box<SheetImageTooltipConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetImage {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetImage"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetImage as SheetImage;
    impl crate::value::ToValue for SheetImage_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.image_content_alt_text {
                properties.insert(
                    "ImageContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scaling {
                properties.insert(
                    "Scaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetImageId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_image_id),
            );
            properties.insert(
                "Source".to_string(),
                crate::value::ToValue::to_value(&self.source),
            );
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetimagescalingconfiguration.html
    pub struct SheetImageScalingConfiguration_ {
        pub scaling_type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetImageScalingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetImageScalingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetImageScalingConfiguration as SheetImageScalingConfiguration;
    impl crate::value::ToValue for SheetImageScalingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.scaling_type {
                properties.insert(
                    "ScalingType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetimagesource.html
    pub struct SheetImageSource_ {
        pub sheet_image_static_file_source: Option<Box<SheetImageStaticFileSource_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetImageSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetImageSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetImageSource as SheetImageSource;
    impl crate::value::ToValue for SheetImageSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sheet_image_static_file_source {
                properties.insert(
                    "SheetImageStaticFileSource".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetimagestaticfilesource.html
    pub struct SheetImageStaticFileSource_ {
        pub static_file_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetImageStaticFileSource {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetImageStaticFileSource"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetImageStaticFileSource as SheetImageStaticFileSource;
    impl crate::value::ToValue for SheetImageStaticFileSource_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "StaticFileId".to_string(),
                crate::value::ToValue::to_value(&self.static_file_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetimagetooltipconfiguration.html
    pub struct SheetImageTooltipConfiguration_ {
        pub tooltip_text: Option<Box<SheetImageTooltipText_>>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetImageTooltipConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetImageTooltipConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetImageTooltipConfiguration as SheetImageTooltipConfiguration;
    impl crate::value::ToValue for SheetImageTooltipConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tooltip_text {
                properties.insert(
                    "TooltipText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetimagetooltiptext.html
    pub struct SheetImageTooltipText_ {
        pub plain_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetImageTooltipText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetImageTooltipText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetImageTooltipText as SheetImageTooltipText;
    impl crate::value::ToValue for SheetImageTooltipText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheettextbox.html
    pub struct SheetTextBox_ {
        pub content: Option<crate::value::ExpString>,
        pub sheet_text_box_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetTextBox {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetTextBox"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetTextBox as SheetTextBox;
    impl crate::value::ToValue for SheetTextBox_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.content {
                properties.insert(
                    "Content".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "SheetTextBoxId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_text_box_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheetvisualscopingconfiguration.html
    pub struct SheetVisualScopingConfiguration_ {
        pub scope: crate::value::ExpString,
        pub sheet_id: crate::value::ExpString,
        pub visual_ids: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SheetVisualScopingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SheetVisualScopingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SheetVisualScopingConfiguration as SheetVisualScopingConfiguration;
    impl crate::value::ToValue for SheetVisualScopingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Scope".to_string(),
                crate::value::ToValue::to_value(&self.scope),
            );
            properties.insert(
                "SheetId".to_string(),
                crate::value::ToValue::to_value(&self.sheet_id),
            );
            if let Some(ref value) = self.visual_ids {
                properties.insert(
                    "VisualIds".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-shortformattext.html
    pub struct ShortFormatText_ {
        pub plain_text: Option<crate::value::ExpString>,
        pub rich_text: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ShortFormatText {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ShortFormatText"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ShortFormatText as ShortFormatText;
    impl crate::value::ToValue for ShortFormatText_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.plain_text {
                properties.insert(
                    "PlainText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rich_text {
                properties.insert(
                    "RichText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-simpleclustermarker.html
    pub struct SimpleClusterMarker_ {
        pub color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SimpleClusterMarker {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SimpleClusterMarker"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SimpleClusterMarker as SimpleClusterMarker;
    impl crate::value::ToValue for SimpleClusterMarker_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-singleaxisoptions.html
    pub struct SingleAxisOptions_ {
        pub y_axis_options: Option<Box<YAxisOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SingleAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SingleAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SingleAxisOptions as SingleAxisOptions;
    impl crate::value::ToValue for SingleAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.y_axis_options {
                properties.insert(
                    "YAxisOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-slidercontroldisplayoptions.html
    pub struct SliderControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SliderControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SliderControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SliderControlDisplayOptions as SliderControlDisplayOptions;
    impl crate::value::ToValue for SliderControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-smallmultiplesaxisproperties.html
    pub struct SmallMultiplesAxisProperties_ {
        pub placement: Option<crate::value::ExpString>,
        pub scale: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SmallMultiplesAxisProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SmallMultiplesAxisProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SmallMultiplesAxisProperties as SmallMultiplesAxisProperties;
    impl crate::value::ToValue for SmallMultiplesAxisProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scale {
                properties.insert("Scale".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-smallmultiplesoptions.html
    pub struct SmallMultiplesOptions_ {
        pub max_visible_columns: Option<f64>,
        pub max_visible_rows: Option<f64>,
        pub panel_configuration: Option<Box<PanelConfiguration_>>,
        pub x_axis: Option<Box<SmallMultiplesAxisProperties_>>,
        pub y_axis: Option<Box<SmallMultiplesAxisProperties_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SmallMultiplesOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SmallMultiplesOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SmallMultiplesOptions as SmallMultiplesOptions;
    impl crate::value::ToValue for SmallMultiplesOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.max_visible_columns {
                properties.insert(
                    "MaxVisibleColumns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.max_visible_rows {
                properties.insert(
                    "MaxVisibleRows".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.panel_configuration {
                properties.insert(
                    "PanelConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.x_axis {
                properties.insert("XAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.y_axis {
                properties.insert("YAxis".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-spacing.html
    pub struct Spacing_ {
        pub bottom: Option<crate::value::ExpString>,
        pub left: Option<crate::value::ExpString>,
        pub right: Option<crate::value::ExpString>,
        pub top: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Spacing {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Spacing"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Spacing as Spacing;
    impl crate::value::ToValue for Spacing_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bottom {
                properties.insert("Bottom".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.left {
                properties.insert("Left".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.right {
                properties.insert("Right".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.top {
                properties.insert("Top".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-stringdefaultvalues.html
    pub struct StringDefaultValues_ {
        pub dynamic_value: Option<Box<DynamicDefaultValue_>>,
        pub static_values: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_StringDefaultValues {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.StringDefaultValues"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_StringDefaultValues as StringDefaultValues;
    impl crate::value::ToValue for StringDefaultValues_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dynamic_value {
                properties.insert(
                    "DynamicValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_values {
                properties.insert(
                    "StaticValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-stringformatconfiguration.html
    pub struct StringFormatConfiguration_ {
        pub null_value_format_configuration: Option<Box<NullValueFormatConfiguration_>>,
        pub numeric_format_configuration: Option<Box<NumericFormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_StringFormatConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.StringFormatConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_StringFormatConfiguration as StringFormatConfiguration;
    impl crate::value::ToValue for StringFormatConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.null_value_format_configuration {
                properties.insert(
                    "NullValueFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_format_configuration {
                properties.insert(
                    "NumericFormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-stringparameterdeclaration.html
    pub struct StringParameterDeclaration_ {
        pub default_values: Option<Box<StringDefaultValues_>>,
        pub mapped_data_set_parameters: Option<Vec<MappedDataSetParameter_>>,
        pub name: crate::value::ExpString,
        pub parameter_value_type: crate::value::ExpString,
        pub value_when_unset: Option<Box<StringValueWhenUnsetConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_StringParameterDeclaration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.StringParameterDeclaration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_StringParameterDeclaration as StringParameterDeclaration;
    impl crate::value::ToValue for StringParameterDeclaration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.default_values {
                properties.insert(
                    "DefaultValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.mapped_data_set_parameters {
                properties.insert(
                    "MappedDataSetParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            properties.insert(
                "ParameterValueType".to_string(),
                crate::value::ToValue::to_value(&self.parameter_value_type),
            );
            if let Some(ref value) = self.value_when_unset {
                properties.insert(
                    "ValueWhenUnset".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-stringvaluewhenunsetconfiguration.html
    pub struct StringValueWhenUnsetConfiguration_ {
        pub custom_value: Option<crate::value::ExpString>,
        pub value_when_unset_option: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_StringValueWhenUnsetConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.StringValueWhenUnsetConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_StringValueWhenUnsetConfiguration as StringValueWhenUnsetConfiguration;
    impl crate::value::ToValue for StringValueWhenUnsetConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_value {
                properties.insert(
                    "CustomValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_when_unset_option {
                properties.insert(
                    "ValueWhenUnsetOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-subtotaloptions.html
    pub struct SubtotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_level: Option<crate::value::ExpString>,
        pub field_level_options: Option<Vec<PivotTableFieldSubtotalOptions_>>,
        pub metric_header_cell_style: Option<Box<TableCellStyle_>>,
        pub style_targets: Option<Vec<TableStyleTarget_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<serde_json::Value>,
        pub value_cell_style: Option<Box<TableCellStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_SubtotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.SubtotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_SubtotalOptions as SubtotalOptions;
    impl crate::value::ToValue for SubtotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_level {
                properties.insert(
                    "FieldLevel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_level_options {
                properties.insert(
                    "FieldLevelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric_header_cell_style {
                properties.insert(
                    "MetricHeaderCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.style_targets {
                properties.insert(
                    "StyleTargets".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value_cell_style {
                properties.insert(
                    "ValueCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableaggregatedfieldwells.html
    pub struct TableAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableAggregatedFieldWells as TableAggregatedFieldWells;
    impl crate::value::ToValue for TableAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableborderoptions.html
    pub struct TableBorderOptions_ {
        pub color: Option<crate::value::ExpString>,
        pub style: Option<crate::value::ExpString>,
        pub thickness: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableBorderOptions as TableBorderOptions;
    impl crate::value::ToValue for TableBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color {
                properties.insert("Color".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.style {
                properties.insert("Style".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.thickness {
                properties.insert(
                    "Thickness".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablecellconditionalformatting.html
    pub struct TableCellConditionalFormatting_ {
        pub field_id: crate::value::ExpString,
        pub text_format: Option<Box<TextConditionalFormat_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableCellConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableCellConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableCellConditionalFormatting as TableCellConditionalFormatting;
    impl crate::value::ToValue for TableCellConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.text_format {
                properties.insert(
                    "TextFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablecellimagesizingconfiguration.html
    pub struct TableCellImageSizingConfiguration_ {
        pub table_cell_image_scaling_configuration: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableCellImageSizingConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableCellImageSizingConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableCellImageSizingConfiguration as TableCellImageSizingConfiguration;
    impl crate::value::ToValue for TableCellImageSizingConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_cell_image_scaling_configuration {
                properties.insert(
                    "TableCellImageScalingConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablecellstyle.html
    pub struct TableCellStyle_ {
        pub background_color: Option<crate::value::ExpString>,
        pub border: Option<Box<GlobalTableBorderOptions_>>,
        pub font_configuration: Option<Box<FontConfiguration_>>,
        pub height: Option<f64>,
        pub horizontal_text_alignment: Option<crate::value::ExpString>,
        pub text_wrap: Option<crate::value::ExpString>,
        pub vertical_text_alignment: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableCellStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableCellStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableCellStyle as TableCellStyle;
    impl crate::value::ToValue for TableCellStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.border {
                properties.insert("Border".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.font_configuration {
                properties.insert(
                    "FontConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.height {
                properties.insert("Height".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.horizontal_text_alignment {
                properties.insert(
                    "HorizontalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_wrap {
                properties.insert(
                    "TextWrap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_text_alignment {
                properties.insert(
                    "VerticalTextAlignment".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableconditionalformatting.html
    pub struct TableConditionalFormatting_ {
        pub conditional_formatting_options: Option<Vec<TableConditionalFormattingOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableConditionalFormatting as TableConditionalFormatting;
    impl crate::value::ToValue for TableConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.conditional_formatting_options {
                properties.insert(
                    "ConditionalFormattingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableconditionalformattingoption.html
    pub struct TableConditionalFormattingOption_ {
        pub cell: Option<Box<TableCellConditionalFormatting_>>,
        pub row: Option<Box<TableRowConditionalFormatting_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableConditionalFormattingOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableConditionalFormattingOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableConditionalFormattingOption as TableConditionalFormattingOption;
    impl crate::value::ToValue for TableConditionalFormattingOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell {
                properties.insert("Cell".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.row {
                properties.insert("Row".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableconfiguration.html
    pub struct TableConfiguration_ {
        pub field_options: Option<Box<TableFieldOptions_>>,
        pub field_wells: Option<Box<TableFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub paginated_report_options: Option<Box<TablePaginatedReportOptions_>>,
        pub sort_configuration: Option<Box<TableSortConfiguration_>>,
        pub table_inline_visualizations: Option<Vec<TableInlineVisualization_>>,
        pub table_options: Option<Box<TableOptions_>>,
        pub total_options: Option<Box<TotalOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableConfiguration as TableConfiguration;
    impl crate::value::ToValue for TableConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_options {
                properties.insert(
                    "FieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.paginated_report_options {
                properties.insert(
                    "PaginatedReportOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_inline_visualizations {
                properties.insert(
                    "TableInlineVisualizations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_options {
                properties.insert(
                    "TableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_options {
                properties.insert(
                    "TotalOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldcustomiconcontent.html
    pub struct TableFieldCustomIconContent_ {
        pub icon: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldCustomIconContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldCustomIconContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldCustomIconContent as TableFieldCustomIconContent;
    impl crate::value::ToValue for TableFieldCustomIconContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldcustomtextcontent.html
    pub struct TableFieldCustomTextContent_ {
        pub font_configuration: Box<FontConfiguration_>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldCustomTextContent {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldCustomTextContent"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldCustomTextContent as TableFieldCustomTextContent;
    impl crate::value::ToValue for TableFieldCustomTextContent_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FontConfiguration".to_string(),
                crate::value::ToValue::to_value(&self.font_configuration),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldimageconfiguration.html
    pub struct TableFieldImageConfiguration_ {
        pub sizing_options: Option<Box<TableCellImageSizingConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldImageConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldImageConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldImageConfiguration as TableFieldImageConfiguration;
    impl crate::value::ToValue for TableFieldImageConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sizing_options {
                properties.insert(
                    "SizingOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldlinkconfiguration.html
    pub struct TableFieldLinkConfiguration_ {
        pub content: Box<TableFieldLinkContentConfiguration_>,
        pub target: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldLinkConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldLinkConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldLinkConfiguration as TableFieldLinkConfiguration;
    impl crate::value::ToValue for TableFieldLinkConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Content".to_string(),
                crate::value::ToValue::to_value(&self.content),
            );
            properties.insert(
                "Target".to_string(),
                crate::value::ToValue::to_value(&self.target),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldlinkcontentconfiguration.html
    pub struct TableFieldLinkContentConfiguration_ {
        pub custom_icon_content: Option<Box<TableFieldCustomIconContent_>>,
        pub custom_text_content: Option<Box<TableFieldCustomTextContent_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldLinkContentConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldLinkContentConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldLinkContentConfiguration as TableFieldLinkContentConfiguration;
    impl crate::value::ToValue for TableFieldLinkContentConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_icon_content {
                properties.insert(
                    "CustomIconContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_text_content {
                properties.insert(
                    "CustomTextContent".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldoption.html
    pub struct TableFieldOption_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub field_id: crate::value::ExpString,
        pub url_styling: Option<Box<TableFieldURLConfiguration_>>,
        pub visibility: Option<serde_json::Value>,
        pub width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldOption as TableFieldOption;
    impl crate::value::ToValue for TableFieldOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.url_styling {
                properties.insert(
                    "URLStyling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.width {
                properties.insert("Width".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldoptions.html
    pub struct TableFieldOptions_ {
        pub order: Option<Vec<crate::value::ExpString>>,
        pub pinned_field_options: Option<Box<TablePinnedFieldOptions_>>,
        pub selected_field_options: Option<Vec<TableFieldOption_>>,
        pub transposed_table_options: Option<Vec<TransposedTableOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldOptions as TableFieldOptions;
    impl crate::value::ToValue for TableFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.order {
                properties.insert("Order".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.pinned_field_options {
                properties.insert(
                    "PinnedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_field_options {
                properties.insert(
                    "SelectedFieldOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.transposed_table_options {
                properties.insert(
                    "TransposedTableOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldurlconfiguration.html
    pub struct TableFieldURLConfiguration_ {
        pub image_configuration: Option<Box<TableFieldImageConfiguration_>>,
        pub link_configuration: Option<Box<TableFieldLinkConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldURLConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldURLConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldURLConfiguration as TableFieldURLConfiguration;
    impl crate::value::ToValue for TableFieldURLConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.image_configuration {
                properties.insert(
                    "ImageConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.link_configuration {
                properties.insert(
                    "LinkConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablefieldwells.html
    pub struct TableFieldWells_ {
        pub table_aggregated_field_wells: Option<Box<TableAggregatedFieldWells_>>,
        pub table_unaggregated_field_wells: Option<Box<TableUnaggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableFieldWells as TableFieldWells;
    impl crate::value::ToValue for TableFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.table_aggregated_field_wells {
                properties.insert(
                    "TableAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_unaggregated_field_wells {
                properties.insert(
                    "TableUnaggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableinlinevisualization.html
    pub struct TableInlineVisualization_ {
        pub data_bars: Option<Box<DataBarsOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableInlineVisualization {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableInlineVisualization"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableInlineVisualization as TableInlineVisualization;
    impl crate::value::ToValue for TableInlineVisualization_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_bars {
                properties.insert(
                    "DataBars".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableoptions.html
    pub struct TableOptions_ {
        pub cell_style: Option<Box<TableCellStyle_>>,
        pub header_style: Option<Box<TableCellStyle_>>,
        pub orientation: Option<crate::value::ExpString>,
        pub row_alternate_color_options: Option<Box<RowAlternateColorOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableOptions as TableOptions;
    impl crate::value::ToValue for TableOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_style {
                properties.insert(
                    "CellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.header_style {
                properties.insert(
                    "HeaderStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.orientation {
                properties.insert(
                    "Orientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_alternate_color_options {
                properties.insert(
                    "RowAlternateColorOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablepaginatedreportoptions.html
    pub struct TablePaginatedReportOptions_ {
        pub overflow_column_header_visibility: Option<serde_json::Value>,
        pub vertical_overflow_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TablePaginatedReportOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TablePaginatedReportOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TablePaginatedReportOptions as TablePaginatedReportOptions;
    impl crate::value::ToValue for TablePaginatedReportOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.overflow_column_header_visibility {
                properties.insert(
                    "OverflowColumnHeaderVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.vertical_overflow_visibility {
                properties.insert(
                    "VerticalOverflowVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablepinnedfieldoptions.html
    pub struct TablePinnedFieldOptions_ {
        pub pinned_left_fields: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TablePinnedFieldOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TablePinnedFieldOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TablePinnedFieldOptions as TablePinnedFieldOptions;
    impl crate::value::ToValue for TablePinnedFieldOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pinned_left_fields {
                properties.insert(
                    "PinnedLeftFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablerowconditionalformatting.html
    pub struct TableRowConditionalFormatting_ {
        pub background_color: Option<Box<ConditionalFormattingColor_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableRowConditionalFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableRowConditionalFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableRowConditionalFormatting as TableRowConditionalFormatting;
    impl crate::value::ToValue for TableRowConditionalFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablesideborderoptions.html
    pub struct TableSideBorderOptions_ {
        pub bottom: Option<Box<TableBorderOptions_>>,
        pub inner_horizontal: Option<Box<TableBorderOptions_>>,
        pub inner_vertical: Option<Box<TableBorderOptions_>>,
        pub left: Option<Box<TableBorderOptions_>>,
        pub right: Option<Box<TableBorderOptions_>>,
        pub top: Option<Box<TableBorderOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableSideBorderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableSideBorderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableSideBorderOptions as TableSideBorderOptions;
    impl crate::value::ToValue for TableSideBorderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bottom {
                properties.insert("Bottom".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.inner_horizontal {
                properties.insert(
                    "InnerHorizontal".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.inner_vertical {
                properties.insert(
                    "InnerVertical".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.left {
                properties.insert("Left".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.right {
                properties.insert("Right".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.top {
                properties.insert("Top".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablesortconfiguration.html
    pub struct TableSortConfiguration_ {
        pub pagination_configuration: Option<Box<PaginationConfiguration_>>,
        pub row_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableSortConfiguration as TableSortConfiguration;
    impl crate::value::ToValue for TableSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.pagination_configuration {
                properties.insert(
                    "PaginationConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.row_sort {
                properties.insert(
                    "RowSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablestyletarget.html
    pub struct TableStyleTarget_ {
        pub cell_type: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableStyleTarget {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableStyleTarget"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableStyleTarget as TableStyleTarget;
    impl crate::value::ToValue for TableStyleTarget_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CellType".to_string(),
                crate::value::ToValue::to_value(&self.cell_type),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tableunaggregatedfieldwells.html
    pub struct TableUnaggregatedFieldWells_ {
        pub values: Option<Vec<UnaggregatedField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableUnaggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableUnaggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableUnaggregatedFieldWells as TableUnaggregatedFieldWells;
    impl crate::value::ToValue for TableUnaggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tablevisual.html
    pub struct TableVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<TableConfiguration_>>,
        pub conditional_formatting: Option<Box<TableConditionalFormatting_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TableVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TableVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TableVisual as TableVisual;
    impl crate::value::ToValue for TableVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.conditional_formatting {
                properties.insert(
                    "ConditionalFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateerror.html
    pub struct TemplateError_ {
        pub message: Option<crate::value::ExpString>,
        pub r#type: Option<crate::value::ExpString>,
        pub violated_entities: Option<Vec<Entity_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TemplateError {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TemplateError"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TemplateError as TemplateError;
    impl crate::value::ToValue for TemplateError_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.message {
                properties.insert(
                    "Message".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.violated_entities {
                properties.insert(
                    "ViolatedEntities".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templatesourceanalysis.html
    pub struct TemplateSourceAnalysis_ {
        pub arn: crate::value::ExpString,
        pub data_set_references: Vec<DataSetReference_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TemplateSourceAnalysis {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TemplateSourceAnalysis"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TemplateSourceAnalysis as TemplateSourceAnalysis;
    impl crate::value::ToValue for TemplateSourceAnalysis_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Arn".to_string(),
                crate::value::ToValue::to_value(&self.arn),
            );
            properties.insert(
                "DataSetReferences".to_string(),
                crate::value::ToValue::to_value(&self.data_set_references),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templatesourceentity.html
    pub struct TemplateSourceEntity_ {
        pub source_analysis: Option<Box<TemplateSourceAnalysis_>>,
        pub source_template: Option<Box<TemplateSourceTemplate_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TemplateSourceEntity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TemplateSourceEntity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TemplateSourceEntity as TemplateSourceEntity;
    impl crate::value::ToValue for TemplateSourceEntity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.source_analysis {
                properties.insert(
                    "SourceAnalysis".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.source_template {
                properties.insert(
                    "SourceTemplate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templatesourcetemplate.html
    pub struct TemplateSourceTemplate_ {
        pub arn: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TemplateSourceTemplate {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TemplateSourceTemplate"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TemplateSourceTemplate as TemplateSourceTemplate;
    impl crate::value::ToValue for TemplateSourceTemplate_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Arn".to_string(),
                crate::value::ToValue::to_value(&self.arn),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html
    pub struct TemplateVersion_ {
        pub created_time: Option<crate::value::ExpString>,
        pub data_set_configurations: Option<Vec<DataSetConfiguration_>>,
        pub description: Option<crate::value::ExpString>,
        pub errors: Option<Vec<TemplateError_>>,
        pub sheets: Option<Vec<Sheet_>>,
        pub source_entity_arn: Option<crate::value::ExpString>,
        pub status: Option<crate::value::ExpString>,
        pub theme_arn: Option<crate::value::ExpString>,
        pub version_number: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TemplateVersion {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TemplateVersion"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TemplateVersion as TemplateVersion;
    impl crate::value::ToValue for TemplateVersion_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.created_time {
                properties.insert(
                    "CreatedTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_set_configurations {
                properties.insert(
                    "DataSetConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.errors {
                properties.insert("Errors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sheets {
                properties.insert("Sheets".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.source_entity_arn {
                properties.insert(
                    "SourceEntityArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.theme_arn {
                properties.insert(
                    "ThemeArn".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.version_number {
                properties.insert(
                    "VersionNumber".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversiondefinition.html
    pub struct TemplateVersionDefinition_ {
        pub analysis_defaults: Option<Box<AnalysisDefaults_>>,
        pub calculated_fields: Option<Vec<CalculatedField_>>,
        pub column_configurations: Option<Vec<ColumnConfiguration_>>,
        pub data_set_configurations: Vec<DataSetConfiguration_>,
        pub filter_groups: Option<Vec<FilterGroup_>>,
        pub options: Option<Box<AssetOptions_>>,
        pub parameter_declarations: Option<Vec<ParameterDeclaration_>>,
        pub query_execution_options: Option<Box<QueryExecutionOptions_>>,
        pub sheets: Option<Vec<SheetDefinition_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TemplateVersionDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TemplateVersionDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TemplateVersionDefinition as TemplateVersionDefinition;
    impl crate::value::ToValue for TemplateVersionDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.analysis_defaults {
                properties.insert(
                    "AnalysisDefaults".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.calculated_fields {
                properties.insert(
                    "CalculatedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_configurations {
                properties.insert(
                    "ColumnConfigurations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DataSetConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.data_set_configurations),
            );
            if let Some(ref value) = self.filter_groups {
                properties.insert(
                    "FilterGroups".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.options {
                properties.insert(
                    "Options".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.parameter_declarations {
                properties.insert(
                    "ParameterDeclarations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.query_execution_options {
                properties.insert(
                    "QueryExecutionOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheets {
                properties.insert("Sheets".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-textareacontroldisplayoptions.html
    pub struct TextAreaControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub placeholder_options: Option<Box<TextControlPlaceholderOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TextAreaControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TextAreaControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TextAreaControlDisplayOptions as TextAreaControlDisplayOptions;
    impl crate::value::ToValue for TextAreaControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder_options {
                properties.insert(
                    "PlaceholderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-textconditionalformat.html
    pub struct TextConditionalFormat_ {
        pub background_color: Option<Box<ConditionalFormattingColor_>>,
        pub icon: Option<Box<ConditionalFormattingIcon_>>,
        pub text_color: Option<Box<ConditionalFormattingColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TextConditionalFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TextConditionalFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TextConditionalFormat as TextConditionalFormat;
    impl crate::value::ToValue for TextConditionalFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.background_color {
                properties.insert(
                    "BackgroundColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.icon {
                properties.insert("Icon".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.text_color {
                properties.insert(
                    "TextColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-textcontrolplaceholderoptions.html
    pub struct TextControlPlaceholderOptions_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TextControlPlaceholderOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TextControlPlaceholderOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TextControlPlaceholderOptions as TextControlPlaceholderOptions;
    impl crate::value::ToValue for TextControlPlaceholderOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-textfieldcontroldisplayoptions.html
    pub struct TextFieldControlDisplayOptions_ {
        pub info_icon_label_options: Option<Box<SheetControlInfoIconLabelOptions_>>,
        pub placeholder_options: Option<Box<TextControlPlaceholderOptions_>>,
        pub title_options: Option<Box<LabelOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TextFieldControlDisplayOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TextFieldControlDisplayOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TextFieldControlDisplayOptions as TextFieldControlDisplayOptions;
    impl crate::value::ToValue for TextFieldControlDisplayOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.info_icon_label_options {
                properties.insert(
                    "InfoIconLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placeholder_options {
                properties.insert(
                    "PlaceholderOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title_options {
                properties.insert(
                    "TitleOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-thousandseparatoroptions.html
    pub struct ThousandSeparatorOptions_ {
        pub grouping_style: Option<crate::value::ExpString>,
        pub symbol: Option<crate::value::ExpString>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ThousandSeparatorOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ThousandSeparatorOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ThousandSeparatorOptions as ThousandSeparatorOptions;
    impl crate::value::ToValue for ThousandSeparatorOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.grouping_style {
                properties.insert(
                    "GroupingStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.symbol {
                properties.insert("Symbol".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-timebasedforecastproperties.html
    pub struct TimeBasedForecastProperties_ {
        pub lower_boundary: Option<f64>,
        pub periods_backward: Option<f64>,
        pub periods_forward: Option<f64>,
        pub prediction_interval: Option<f64>,
        pub seasonality: Option<f64>,
        pub upper_boundary: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TimeBasedForecastProperties {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TimeBasedForecastProperties"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TimeBasedForecastProperties as TimeBasedForecastProperties;
    impl crate::value::ToValue for TimeBasedForecastProperties_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.lower_boundary {
                properties.insert(
                    "LowerBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_backward {
                properties.insert(
                    "PeriodsBackward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.periods_forward {
                properties.insert(
                    "PeriodsForward".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prediction_interval {
                properties.insert(
                    "PredictionInterval".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.seasonality {
                properties.insert(
                    "Seasonality".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.upper_boundary {
                properties.insert(
                    "UpperBoundary".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-timeequalityfilter.html
    pub struct TimeEqualityFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub parameter_name: Option<crate::value::ExpString>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub time_granularity: Option<crate::value::ExpString>,
        pub value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TimeEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TimeEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TimeEqualityFilter as TimeEqualityFilter;
    impl crate::value::ToValue for TimeEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-timerangedrilldownfilter.html
    pub struct TimeRangeDrillDownFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub range_maximum: crate::value::ExpString,
        pub range_minimum: crate::value::ExpString,
        pub time_granularity: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TimeRangeDrillDownFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TimeRangeDrillDownFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TimeRangeDrillDownFilter as TimeRangeDrillDownFilter;
    impl crate::value::ToValue for TimeRangeDrillDownFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "RangeMaximum".to_string(),
                crate::value::ToValue::to_value(&self.range_maximum),
            );
            properties.insert(
                "RangeMinimum".to_string(),
                crate::value::ToValue::to_value(&self.range_minimum),
            );
            properties.insert(
                "TimeGranularity".to_string(),
                crate::value::ToValue::to_value(&self.time_granularity),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-timerangefilter.html
    pub struct TimeRangeFilter_ {
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub exclude_period_configuration: Option<Box<ExcludePeriodConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub include_maximum: Option<crate::value::ExpBool>,
        pub include_minimum: Option<crate::value::ExpBool>,
        pub null_option: crate::value::ExpString,
        pub range_maximum_value: Option<Box<TimeRangeFilterValue_>>,
        pub range_minimum_value: Option<Box<TimeRangeFilterValue_>>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TimeRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TimeRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TimeRangeFilter as TimeRangeFilter;
    impl crate::value::ToValue for TimeRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.exclude_period_configuration {
                properties.insert(
                    "ExcludePeriodConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.include_maximum {
                properties.insert(
                    "IncludeMaximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.include_minimum {
                properties.insert(
                    "IncludeMinimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "NullOption".to_string(),
                crate::value::ToValue::to_value(&self.null_option),
            );
            if let Some(ref value) = self.range_maximum_value {
                properties.insert(
                    "RangeMaximumValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_minimum_value {
                properties.insert(
                    "RangeMinimumValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-timerangefiltervalue.html
    pub struct TimeRangeFilterValue_ {
        pub parameter: Option<crate::value::ExpString>,
        pub rolling_date: Option<Box<RollingDateConfiguration_>>,
        pub static_value: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TimeRangeFilterValue {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TimeRangeFilterValue"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TimeRangeFilterValue as TimeRangeFilterValue;
    impl crate::value::ToValue for TimeRangeFilterValue_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.parameter {
                properties.insert(
                    "Parameter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.rolling_date {
                properties.insert(
                    "RollingDate".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.static_value {
                properties.insert(
                    "StaticValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tooltipitem.html
    pub struct TooltipItem_ {
        pub column_tooltip_item: Option<Box<ColumnTooltipItem_>>,
        pub field_tooltip_item: Option<Box<FieldTooltipItem_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TooltipItem {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TooltipItem"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TooltipItem as TooltipItem;
    impl crate::value::ToValue for TooltipItem_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_tooltip_item {
                properties.insert(
                    "ColumnTooltipItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_tooltip_item {
                properties.insert(
                    "FieldTooltipItem".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-tooltipoptions.html
    pub struct TooltipOptions_ {
        pub field_based_tooltip: Option<Box<FieldBasedTooltip_>>,
        pub selected_tooltip_type: Option<crate::value::ExpString>,
        pub tooltip_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TooltipOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TooltipOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TooltipOptions as TooltipOptions;
    impl crate::value::ToValue for TooltipOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_based_tooltip {
                properties.insert(
                    "FieldBasedTooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.selected_tooltip_type {
                properties.insert(
                    "SelectedTooltipType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip_visibility {
                properties.insert(
                    "TooltipVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-topbottomfilter.html
    pub struct TopBottomFilter_ {
        pub aggregation_sort_configurations: Vec<AggregationSortConfiguration_>,
        pub column: Box<ColumnIdentifier_>,
        pub default_filter_control_configuration: Option<Box<DefaultFilterControlConfiguration_>>,
        pub filter_id: crate::value::ExpString,
        pub limit: Option<f64>,
        pub parameter_name: Option<crate::value::ExpString>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TopBottomFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TopBottomFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TopBottomFilter as TopBottomFilter;
    impl crate::value::ToValue for TopBottomFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "AggregationSortConfigurations".to_string(),
                crate::value::ToValue::to_value(&self.aggregation_sort_configurations),
            );
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            if let Some(ref value) = self.default_filter_control_configuration {
                properties.insert(
                    "DefaultFilterControlConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterId".to_string(),
                crate::value::ToValue::to_value(&self.filter_id),
            );
            if let Some(ref value) = self.limit {
                properties.insert("Limit".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.parameter_name {
                properties.insert(
                    "ParameterName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-topbottommoverscomputation.html
    pub struct TopBottomMoversComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub mover_size: Option<f64>,
        pub name: Option<crate::value::ExpString>,
        pub sort_order: Option<crate::value::ExpString>,
        pub time: Option<Box<DimensionField_>>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TopBottomMoversComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TopBottomMoversComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TopBottomMoversComputation as TopBottomMoversComputation;
    impl crate::value::ToValue for TopBottomMoversComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.mover_size {
                properties.insert(
                    "MoverSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sort_order {
                properties.insert(
                    "SortOrder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time {
                properties.insert("Time".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-topbottomrankedcomputation.html
    pub struct TopBottomRankedComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub result_size: Option<f64>,
        pub r#type: crate::value::ExpString,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TopBottomRankedComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TopBottomRankedComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TopBottomRankedComputation as TopBottomRankedComputation;
    impl crate::value::ToValue for TopBottomRankedComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.result_size {
                properties.insert(
                    "ResultSize".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Type".to_string(),
                crate::value::ToValue::to_value(&self.r#type),
            );
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-totalaggregationcomputation.html
    pub struct TotalAggregationComputation_ {
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
        pub value: Option<Box<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TotalAggregationComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TotalAggregationComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TotalAggregationComputation as TotalAggregationComputation;
    impl crate::value::ToValue for TotalAggregationComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.value {
                properties.insert("Value".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-totalaggregationfunction.html
    pub struct TotalAggregationFunction_ {
        pub simple_total_aggregation_function: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TotalAggregationFunction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TotalAggregationFunction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TotalAggregationFunction as TotalAggregationFunction;
    impl crate::value::ToValue for TotalAggregationFunction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.simple_total_aggregation_function {
                properties.insert(
                    "SimpleTotalAggregationFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-totalaggregationoption.html
    pub struct TotalAggregationOption_ {
        pub field_id: crate::value::ExpString,
        pub total_aggregation_function: Box<TotalAggregationFunction_>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TotalAggregationOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TotalAggregationOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TotalAggregationOption as TotalAggregationOption;
    impl crate::value::ToValue for TotalAggregationOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            properties.insert(
                "TotalAggregationFunction".to_string(),
                crate::value::ToValue::to_value(&self.total_aggregation_function),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-totaloptions.html
    pub struct TotalOptions_ {
        pub custom_label: Option<crate::value::ExpString>,
        pub placement: Option<crate::value::ExpString>,
        pub scroll_status: Option<crate::value::ExpString>,
        pub total_aggregation_options: Option<Vec<TotalAggregationOption_>>,
        pub total_cell_style: Option<Box<TableCellStyle_>>,
        pub totals_visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TotalOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TotalOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TotalOptions as TotalOptions;
    impl crate::value::ToValue for TotalOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.custom_label {
                properties.insert(
                    "CustomLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.placement {
                properties.insert(
                    "Placement".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scroll_status {
                properties.insert(
                    "ScrollStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_aggregation_options {
                properties.insert(
                    "TotalAggregationOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_cell_style {
                properties.insert(
                    "TotalCellStyle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.totals_visibility {
                properties.insert(
                    "TotalsVisibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-transposedtableoption.html
    pub struct TransposedTableOption_ {
        pub column_index: Option<f64>,
        pub column_type: crate::value::ExpString,
        pub column_width: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TransposedTableOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TransposedTableOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TransposedTableOption as TransposedTableOption;
    impl crate::value::ToValue for TransposedTableOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.column_index {
                properties.insert(
                    "ColumnIndex".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnType".to_string(),
                crate::value::ToValue::to_value(&self.column_type),
            );
            if let Some(ref value) = self.column_width {
                properties.insert(
                    "ColumnWidth".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-treemapaggregatedfieldwells.html
    pub struct TreeMapAggregatedFieldWells_ {
        pub colors: Option<Vec<MeasureField_>>,
        pub groups: Option<Vec<DimensionField_>>,
        pub sizes: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TreeMapAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TreeMapAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TreeMapAggregatedFieldWells as TreeMapAggregatedFieldWells;
    impl crate::value::ToValue for TreeMapAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.groups {
                properties.insert("Groups".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.sizes {
                properties.insert("Sizes".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-treemapconfiguration.html
    pub struct TreeMapConfiguration_ {
        pub color_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_scale: Option<Box<ColorScale_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<TreeMapFieldWells_>>,
        pub group_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub size_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<TreeMapSortConfiguration_>>,
        pub tooltip: Option<Box<TooltipOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TreeMapConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TreeMapConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TreeMapConfiguration as TreeMapConfiguration;
    impl crate::value::ToValue for TreeMapConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.color_label_options {
                properties.insert(
                    "ColorLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_scale {
                properties.insert(
                    "ColorScale".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.group_label_options {
                properties.insert(
                    "GroupLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.size_label_options {
                properties.insert(
                    "SizeLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tooltip {
                properties.insert(
                    "Tooltip".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-treemapfieldwells.html
    pub struct TreeMapFieldWells_ {
        pub tree_map_aggregated_field_wells: Option<Box<TreeMapAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TreeMapFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TreeMapFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TreeMapFieldWells as TreeMapFieldWells;
    impl crate::value::ToValue for TreeMapFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tree_map_aggregated_field_wells {
                properties.insert(
                    "TreeMapAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-treemapsortconfiguration.html
    pub struct TreeMapSortConfiguration_ {
        pub tree_map_group_items_limit_configuration: Option<Box<ItemsLimitConfiguration_>>,
        pub tree_map_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TreeMapSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TreeMapSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TreeMapSortConfiguration as TreeMapSortConfiguration;
    impl crate::value::ToValue for TreeMapSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tree_map_group_items_limit_configuration {
                properties.insert(
                    "TreeMapGroupItemsLimitConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tree_map_sort {
                properties.insert(
                    "TreeMapSort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-treemapvisual.html
    pub struct TreeMapVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<TreeMapConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TreeMapVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TreeMapVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TreeMapVisual as TreeMapVisual;
    impl crate::value::ToValue for TreeMapVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-trendarrowoptions.html
    pub struct TrendArrowOptions_ {
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_TrendArrowOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.TrendArrowOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_TrendArrowOptions as TrendArrowOptions;
    impl crate::value::ToValue for TrendArrowOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-unaggregatedfield.html
    pub struct UnaggregatedField_ {
        pub column: Box<ColumnIdentifier_>,
        pub field_id: crate::value::ExpString,
        pub format_configuration: Option<Box<FormatConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_UnaggregatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.UnaggregatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_UnaggregatedField as UnaggregatedField;
    impl crate::value::ToValue for UnaggregatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Column".to_string(),
                crate::value::ToValue::to_value(&self.column),
            );
            properties.insert(
                "FieldId".to_string(),
                crate::value::ToValue::to_value(&self.field_id),
            );
            if let Some(ref value) = self.format_configuration {
                properties.insert(
                    "FormatConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-uniquevaluescomputation.html
    pub struct UniqueValuesComputation_ {
        pub category: Option<Box<DimensionField_>>,
        pub computation_id: crate::value::ExpString,
        pub name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_UniqueValuesComputation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.UniqueValuesComputation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_UniqueValuesComputation as UniqueValuesComputation;
    impl crate::value::ToValue for UniqueValuesComputation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category {
                properties.insert(
                    "Category".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ComputationId".to_string(),
                crate::value::ToValue::to_value(&self.computation_id),
            );
            if let Some(ref value) = self.name {
                properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-validationstrategy.html
    pub struct ValidationStrategy_ {
        pub mode: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_ValidationStrategy {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.ValidationStrategy"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_ValidationStrategy as ValidationStrategy;
    impl crate::value::ToValue for ValidationStrategy_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Mode".to_string(),
                crate::value::ToValue::to_value(&self.mode),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visiblerangeoptions.html
    pub struct VisibleRangeOptions_ {
        pub percent_range: Option<Box<PercentVisibleRange_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisibleRangeOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisibleRangeOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisibleRangeOptions as VisibleRangeOptions;
    impl crate::value::ToValue for VisibleRangeOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.percent_range {
                properties.insert(
                    "PercentRange".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visual.html
    pub struct Visual_ {
        pub bar_chart_visual: Option<Box<BarChartVisual_>>,
        pub box_plot_visual: Option<Box<BoxPlotVisual_>>,
        pub combo_chart_visual: Option<Box<ComboChartVisual_>>,
        pub custom_content_visual: Option<Box<CustomContentVisual_>>,
        pub empty_visual: Option<Box<EmptyVisual_>>,
        pub filled_map_visual: Option<Box<FilledMapVisual_>>,
        pub funnel_chart_visual: Option<Box<FunnelChartVisual_>>,
        pub gauge_chart_visual: Option<Box<GaugeChartVisual_>>,
        pub geospatial_map_visual: Option<Box<GeospatialMapVisual_>>,
        pub heat_map_visual: Option<Box<HeatMapVisual_>>,
        pub histogram_visual: Option<Box<HistogramVisual_>>,
        pub insight_visual: Option<Box<InsightVisual_>>,
        pub kpi_visual: Option<Box<KPIVisual_>>,
        pub line_chart_visual: Option<Box<LineChartVisual_>>,
        pub pie_chart_visual: Option<Box<PieChartVisual_>>,
        pub pivot_table_visual: Option<Box<PivotTableVisual_>>,
        pub plugin_visual: Option<Box<PluginVisual_>>,
        pub radar_chart_visual: Option<Box<RadarChartVisual_>>,
        pub sankey_diagram_visual: Option<Box<SankeyDiagramVisual_>>,
        pub scatter_plot_visual: Option<Box<ScatterPlotVisual_>>,
        pub table_visual: Option<Box<TableVisual_>>,
        pub tree_map_visual: Option<Box<TreeMapVisual_>>,
        pub waterfall_visual: Option<Box<WaterfallVisual_>>,
        pub word_cloud_visual: Option<Box<WordCloudVisual_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_Visual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.Visual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_Visual as Visual;
    impl crate::value::ToValue for Visual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.bar_chart_visual {
                properties.insert(
                    "BarChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.box_plot_visual {
                properties.insert(
                    "BoxPlotVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.combo_chart_visual {
                properties.insert(
                    "ComboChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.custom_content_visual {
                properties.insert(
                    "CustomContentVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.empty_visual {
                properties.insert(
                    "EmptyVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filled_map_visual {
                properties.insert(
                    "FilledMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.funnel_chart_visual {
                properties.insert(
                    "FunnelChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.gauge_chart_visual {
                properties.insert(
                    "GaugeChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.geospatial_map_visual {
                properties.insert(
                    "GeospatialMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.heat_map_visual {
                properties.insert(
                    "HeatMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.histogram_visual {
                properties.insert(
                    "HistogramVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.insight_visual {
                properties.insert(
                    "InsightVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.kpi_visual {
                properties.insert(
                    "KPIVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.line_chart_visual {
                properties.insert(
                    "LineChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pie_chart_visual {
                properties.insert(
                    "PieChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.pivot_table_visual {
                properties.insert(
                    "PivotTableVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.plugin_visual {
                properties.insert(
                    "PluginVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.radar_chart_visual {
                properties.insert(
                    "RadarChartVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sankey_diagram_visual {
                properties.insert(
                    "SankeyDiagramVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.scatter_plot_visual {
                properties.insert(
                    "ScatterPlotVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.table_visual {
                properties.insert(
                    "TableVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.tree_map_visual {
                properties.insert(
                    "TreeMapVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.waterfall_visual {
                properties.insert(
                    "WaterfallVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_cloud_visual {
                properties.insert(
                    "WordCloudVisual".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualcustomaction.html
    pub struct VisualCustomAction_ {
        pub action_operations: Vec<VisualCustomActionOperation_>,
        pub custom_action_id: crate::value::ExpString,
        pub name: crate::value::ExpString,
        pub status: Option<crate::value::ExpString>,
        pub trigger: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualCustomAction {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualCustomAction"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualCustomAction as VisualCustomAction;
    impl crate::value::ToValue for VisualCustomAction_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "ActionOperations".to_string(),
                crate::value::ToValue::to_value(&self.action_operations),
            );
            properties.insert(
                "CustomActionId".to_string(),
                crate::value::ToValue::to_value(&self.custom_action_id),
            );
            properties.insert(
                "Name".to_string(),
                crate::value::ToValue::to_value(&self.name),
            );
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.insert(
                "Trigger".to_string(),
                crate::value::ToValue::to_value(&self.trigger),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualcustomactionoperation.html
    pub struct VisualCustomActionOperation_ {
        pub filter_operation: Option<Box<CustomActionFilterOperation_>>,
        pub navigation_operation: Option<Box<CustomActionNavigationOperation_>>,
        pub set_parameters_operation: Option<Box<CustomActionSetParametersOperation_>>,
        pub url_operation: Option<Box<CustomActionURLOperation_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualCustomActionOperation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualCustomActionOperation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualCustomActionOperation as VisualCustomActionOperation;
    impl crate::value::ToValue for VisualCustomActionOperation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.filter_operation {
                properties.insert(
                    "FilterOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.navigation_operation {
                properties.insert(
                    "NavigationOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.set_parameters_operation {
                properties.insert(
                    "SetParametersOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.url_operation {
                properties.insert(
                    "URLOperation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualinteractionoptions.html
    pub struct VisualInteractionOptions_ {
        pub context_menu_option: Option<Box<ContextMenuOption_>>,
        pub visual_menu_option: Option<Box<VisualMenuOption_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualInteractionOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualInteractionOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualInteractionOptions as VisualInteractionOptions;
    impl crate::value::ToValue for VisualInteractionOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.context_menu_option {
                properties.insert(
                    "ContextMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_menu_option {
                properties.insert(
                    "VisualMenuOption".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualmenuoption.html
    pub struct VisualMenuOption_ {
        pub availability_status: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualMenuOption {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualMenuOption"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualMenuOption as VisualMenuOption;
    impl crate::value::ToValue for VisualMenuOption_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_status {
                properties.insert(
                    "AvailabilityStatus".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualpalette.html
    pub struct VisualPalette_ {
        pub chart_color: Option<crate::value::ExpString>,
        pub color_map: Option<Vec<DataPathColor_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualPalette {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualPalette"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualPalette as VisualPalette;
    impl crate::value::ToValue for VisualPalette_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.chart_color {
                properties.insert(
                    "ChartColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_map {
                properties.insert(
                    "ColorMap".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualsubtitlelabeloptions.html
    pub struct VisualSubtitleLabelOptions_ {
        pub format_text: Option<Box<LongFormatText_>>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualSubtitleLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualSubtitleLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualSubtitleLabelOptions as VisualSubtitleLabelOptions;
    impl crate::value::ToValue for VisualSubtitleLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_text {
                properties.insert(
                    "FormatText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-visualtitlelabeloptions.html
    pub struct VisualTitleLabelOptions_ {
        pub format_text: Option<Box<ShortFormatText_>>,
        pub visibility: Option<serde_json::Value>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_VisualTitleLabelOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.VisualTitleLabelOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_VisualTitleLabelOptions as VisualTitleLabelOptions;
    impl crate::value::ToValue for VisualTitleLabelOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.format_text {
                properties.insert(
                    "FormatText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visibility {
                properties.insert(
                    "Visibility".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartaggregatedfieldwells.html
    pub struct WaterfallChartAggregatedFieldWells_ {
        pub breakdowns: Option<Vec<DimensionField_>>,
        pub categories: Option<Vec<DimensionField_>>,
        pub values: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartAggregatedFieldWells as WaterfallChartAggregatedFieldWells;
    impl crate::value::ToValue for WaterfallChartAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.breakdowns {
                properties.insert(
                    "Breakdowns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.categories {
                properties.insert(
                    "Categories".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.values {
                properties.insert("Values".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartcolorconfiguration.html
    pub struct WaterfallChartColorConfiguration_ {
        pub group_color_configuration: Option<Box<WaterfallChartGroupColorConfiguration_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartColorConfiguration as WaterfallChartColorConfiguration;
    impl crate::value::ToValue for WaterfallChartColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_color_configuration {
                properties.insert(
                    "GroupColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartconfiguration.html
    pub struct WaterfallChartConfiguration_ {
        pub category_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub category_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub color_configuration: Option<Box<WaterfallChartColorConfiguration_>>,
        pub data_labels: Option<Box<DataLabelOptions_>>,
        pub field_wells: Option<Box<WaterfallChartFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub legend: Option<Box<LegendOptions_>>,
        pub primary_y_axis_display_options: Option<Box<AxisDisplayOptions_>>,
        pub primary_y_axis_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub sort_configuration: Option<Box<WaterfallChartSortConfiguration_>>,
        pub visual_palette: Option<Box<VisualPalette_>>,
        pub waterfall_chart_options: Option<Box<WaterfallChartOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartConfiguration as WaterfallChartConfiguration;
    impl crate::value::ToValue for WaterfallChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_axis_display_options {
                properties.insert(
                    "CategoryAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_axis_label_options {
                properties.insert(
                    "CategoryAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.color_configuration {
                properties.insert(
                    "ColorConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_labels {
                properties.insert(
                    "DataLabels".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.legend {
                properties.insert("Legend".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.primary_y_axis_display_options {
                properties.insert(
                    "PrimaryYAxisDisplayOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_y_axis_label_options {
                properties.insert(
                    "PrimaryYAxisLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.visual_palette {
                properties.insert(
                    "VisualPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.waterfall_chart_options {
                properties.insert(
                    "WaterfallChartOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartfieldwells.html
    pub struct WaterfallChartFieldWells_ {
        pub waterfall_chart_aggregated_field_wells:
            Option<Box<WaterfallChartAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartFieldWells as WaterfallChartFieldWells;
    impl crate::value::ToValue for WaterfallChartFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.waterfall_chart_aggregated_field_wells {
                properties.insert(
                    "WaterfallChartAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartgroupcolorconfiguration.html
    pub struct WaterfallChartGroupColorConfiguration_ {
        pub negative_bar_color: Option<crate::value::ExpString>,
        pub positive_bar_color: Option<crate::value::ExpString>,
        pub total_bar_color: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartGroupColorConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartGroupColorConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartGroupColorConfiguration as WaterfallChartGroupColorConfiguration;
    impl crate::value::ToValue for WaterfallChartGroupColorConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.negative_bar_color {
                properties.insert(
                    "NegativeBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.positive_bar_color {
                properties.insert(
                    "PositiveBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.total_bar_color {
                properties.insert(
                    "TotalBarColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartoptions.html
    pub struct WaterfallChartOptions_ {
        pub total_bar_label: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartOptions as WaterfallChartOptions;
    impl crate::value::ToValue for WaterfallChartOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.total_bar_label {
                properties.insert(
                    "TotalBarLabel".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallchartsortconfiguration.html
    pub struct WaterfallChartSortConfiguration_ {
        pub breakdown_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallChartSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallChartSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallChartSortConfiguration as WaterfallChartSortConfiguration;
    impl crate::value::ToValue for WaterfallChartSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.breakdown_items_limit {
                properties.insert(
                    "BreakdownItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-waterfallvisual.html
    pub struct WaterfallVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<WaterfallChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WaterfallVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WaterfallVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WaterfallVisual as WaterfallVisual;
    impl crate::value::ToValue for WaterfallVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-whatifpointscenario.html
    pub struct WhatIfPointScenario_ {
        pub date: crate::value::ExpString,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WhatIfPointScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WhatIfPointScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WhatIfPointScenario as WhatIfPointScenario;
    impl crate::value::ToValue for WhatIfPointScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Date".to_string(),
                crate::value::ToValue::to_value(&self.date),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-whatifrangescenario.html
    pub struct WhatIfRangeScenario_ {
        pub end_date: crate::value::ExpString,
        pub start_date: crate::value::ExpString,
        pub value: f64,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WhatIfRangeScenario {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WhatIfRangeScenario"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WhatIfRangeScenario as WhatIfRangeScenario;
    impl crate::value::ToValue for WhatIfRangeScenario_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "EndDate".to_string(),
                crate::value::ToValue::to_value(&self.end_date),
            );
            properties.insert(
                "StartDate".to_string(),
                crate::value::ToValue::to_value(&self.start_date),
            );
            properties.insert(
                "Value".to_string(),
                crate::value::ToValue::to_value(&self.value),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-wordcloudaggregatedfieldwells.html
    pub struct WordCloudAggregatedFieldWells_ {
        pub group_by: Option<Vec<DimensionField_>>,
        pub size: Option<Vec<MeasureField_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WordCloudAggregatedFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WordCloudAggregatedFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WordCloudAggregatedFieldWells as WordCloudAggregatedFieldWells;
    impl crate::value::ToValue for WordCloudAggregatedFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.group_by {
                properties.insert(
                    "GroupBy".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.size {
                properties.insert("Size".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-wordcloudchartconfiguration.html
    pub struct WordCloudChartConfiguration_ {
        pub category_label_options: Option<Box<ChartAxisLabelOptions_>>,
        pub field_wells: Option<Box<WordCloudFieldWells_>>,
        pub interactions: Option<Box<VisualInteractionOptions_>>,
        pub sort_configuration: Option<Box<WordCloudSortConfiguration_>>,
        pub word_cloud_options: Option<Box<WordCloudOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WordCloudChartConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WordCloudChartConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WordCloudChartConfiguration as WordCloudChartConfiguration;
    impl crate::value::ToValue for WordCloudChartConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_label_options {
                properties.insert(
                    "CategoryLabelOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.field_wells {
                properties.insert(
                    "FieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.interactions {
                properties.insert(
                    "Interactions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sort_configuration {
                properties.insert(
                    "SortConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_cloud_options {
                properties.insert(
                    "WordCloudOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-wordcloudfieldwells.html
    pub struct WordCloudFieldWells_ {
        pub word_cloud_aggregated_field_wells: Option<Box<WordCloudAggregatedFieldWells_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WordCloudFieldWells {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WordCloudFieldWells"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WordCloudFieldWells as WordCloudFieldWells;
    impl crate::value::ToValue for WordCloudFieldWells_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.word_cloud_aggregated_field_wells {
                properties.insert(
                    "WordCloudAggregatedFieldWells".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-wordcloudoptions.html
    pub struct WordCloudOptions_ {
        pub cloud_layout: Option<crate::value::ExpString>,
        pub maximum_string_length: Option<f64>,
        pub word_casing: Option<crate::value::ExpString>,
        pub word_orientation: Option<crate::value::ExpString>,
        pub word_padding: Option<crate::value::ExpString>,
        pub word_scaling: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WordCloudOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WordCloudOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WordCloudOptions as WordCloudOptions;
    impl crate::value::ToValue for WordCloudOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cloud_layout {
                properties.insert(
                    "CloudLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.maximum_string_length {
                properties.insert(
                    "MaximumStringLength".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_casing {
                properties.insert(
                    "WordCasing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_orientation {
                properties.insert(
                    "WordOrientation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_padding {
                properties.insert(
                    "WordPadding".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.word_scaling {
                properties.insert(
                    "WordScaling".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-wordcloudsortconfiguration.html
    pub struct WordCloudSortConfiguration_ {
        pub category_items_limit: Option<Box<ItemsLimitConfiguration_>>,
        pub category_sort: Option<Vec<FieldSortOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WordCloudSortConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WordCloudSortConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WordCloudSortConfiguration as WordCloudSortConfiguration;
    impl crate::value::ToValue for WordCloudSortConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_items_limit {
                properties.insert(
                    "CategoryItemsLimit".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_sort {
                properties.insert(
                    "CategorySort".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-wordcloudvisual.html
    pub struct WordCloudVisual_ {
        pub actions: Option<Vec<VisualCustomAction_>>,
        pub chart_configuration: Option<Box<WordCloudChartConfiguration_>>,
        pub column_hierarchies: Option<Vec<ColumnHierarchy_>>,
        pub subtitle: Option<Box<VisualSubtitleLabelOptions_>>,
        pub title: Option<Box<VisualTitleLabelOptions_>>,
        pub visual_content_alt_text: Option<crate::value::ExpString>,
        pub visual_id: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_WordCloudVisual {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.WordCloudVisual"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_WordCloudVisual as WordCloudVisual;
    impl crate::value::ToValue for WordCloudVisual_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.actions {
                properties.insert(
                    "Actions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.chart_configuration {
                properties.insert(
                    "ChartConfiguration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_hierarchies {
                properties.insert(
                    "ColumnHierarchies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.subtitle {
                properties.insert(
                    "Subtitle".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.title {
                properties.insert("Title".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.visual_content_alt_text {
                properties.insert(
                    "VisualContentAltText".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "VisualId".to_string(),
                crate::value::ToValue::to_value(&self.visual_id),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-yaxisoptions.html
    pub struct YAxisOptions_ {
        pub y_axis: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Template_YAxisOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Template.YAxisOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Template_YAxisOptions as YAxisOptions;
    impl crate::value::ToValue for YAxisOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "YAxis".to_string(),
                crate::value::ToValue::to_value(&self.y_axis),
            );
            properties.into()
        }
    }
}
pub mod theme {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-borderstyle.html
    pub struct BorderStyle_ {
        pub show: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_BorderStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.BorderStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_BorderStyle as BorderStyle;
    impl crate::value::ToValue for BorderStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.show {
                properties.insert("Show".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-datacolorpalette.html
    pub struct DataColorPalette_ {
        pub colors: Option<Vec<crate::value::ExpString>>,
        pub empty_fill_color: Option<crate::value::ExpString>,
        pub min_max_gradient: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_DataColorPalette {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.DataColorPalette"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_DataColorPalette as DataColorPalette;
    impl crate::value::ToValue for DataColorPalette_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.colors {
                properties.insert("Colors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.empty_fill_color {
                properties.insert(
                    "EmptyFillColor".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.min_max_gradient {
                properties.insert(
                    "MinMaxGradient".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-font.html
    pub struct Font_ {
        pub font_family: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_Font {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.Font"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_Font as Font;
    impl crate::value::ToValue for Font_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_family {
                properties.insert(
                    "FontFamily".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-gutterstyle.html
    pub struct GutterStyle_ {
        pub show: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_GutterStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.GutterStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_GutterStyle as GutterStyle;
    impl crate::value::ToValue for GutterStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.show {
                properties.insert("Show".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-marginstyle.html
    pub struct MarginStyle_ {
        pub show: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_MarginStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.MarginStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_MarginStyle as MarginStyle;
    impl crate::value::ToValue for MarginStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.show {
                properties.insert("Show".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-resourcepermission.html
    pub struct ResourcePermission_ {
        pub actions: Vec<crate::value::ExpString>,
        pub principal: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_ResourcePermission {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.ResourcePermission"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_ResourcePermission as ResourcePermission;
    impl crate::value::ToValue for ResourcePermission_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "Actions".to_string(),
                crate::value::ToValue::to_value(&self.actions),
            );
            properties.insert(
                "Principal".to_string(),
                crate::value::ToValue::to_value(&self.principal),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-sheetstyle.html
    pub struct SheetStyle_ {
        pub tile: Option<Box<TileStyle_>>,
        pub tile_layout: Option<Box<TileLayoutStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_SheetStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.SheetStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_SheetStyle as SheetStyle;
    impl crate::value::ToValue for SheetStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.tile {
                properties.insert("Tile".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.tile_layout {
                properties.insert(
                    "TileLayout".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeconfiguration.html
    pub struct ThemeConfiguration_ {
        pub data_color_palette: Option<Box<DataColorPalette_>>,
        pub sheet: Option<Box<SheetStyle_>>,
        pub typography: Option<Box<Typography_>>,
        pub ui_color_palette: Option<Box<UIColorPalette_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_ThemeConfiguration {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.ThemeConfiguration"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_ThemeConfiguration as ThemeConfiguration;
    impl crate::value::ToValue for ThemeConfiguration_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.data_color_palette {
                properties.insert(
                    "DataColorPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sheet {
                properties.insert("Sheet".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.typography {
                properties.insert(
                    "Typography".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.ui_color_palette {
                properties.insert(
                    "UIColorPalette".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeerror.html
    pub struct ThemeError_ {
        pub message: Option<crate::value::ExpString>,
        pub r#type: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_ThemeError {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.ThemeError"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_ThemeError as ThemeError;
    impl crate::value::ToValue for ThemeError_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.message {
                properties.insert(
                    "Message".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.r#type {
                properties.insert("Type".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html
    pub struct ThemeVersion_ {
        pub arn: Option<crate::value::ExpString>,
        pub base_theme_id: Option<crate::value::ExpString>,
        pub configuration: Option<Box<ThemeConfiguration_>>,
        pub created_time: Option<crate::value::ExpString>,
        pub description: Option<crate::value::ExpString>,
        pub errors: Option<Vec<ThemeError_>>,
        pub status: Option<crate::value::ExpString>,
        pub version_number: Option<f64>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_ThemeVersion {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.ThemeVersion"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_ThemeVersion as ThemeVersion;
    impl crate::value::ToValue for ThemeVersion_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.arn {
                properties.insert("Arn".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.base_theme_id {
                properties.insert(
                    "BaseThemeId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.configuration {
                properties.insert(
                    "Configuration".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.created_time {
                properties.insert(
                    "CreatedTime".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.description {
                properties.insert(
                    "Description".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.errors {
                properties.insert("Errors".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.version_number {
                properties.insert(
                    "VersionNumber".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-tilelayoutstyle.html
    pub struct TileLayoutStyle_ {
        pub gutter: Option<Box<GutterStyle_>>,
        pub margin: Option<Box<MarginStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_TileLayoutStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.TileLayoutStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_TileLayoutStyle as TileLayoutStyle;
    impl crate::value::ToValue for TileLayoutStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.gutter {
                properties.insert("Gutter".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.margin {
                properties.insert("Margin".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-tilestyle.html
    pub struct TileStyle_ {
        pub border: Option<Box<BorderStyle_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_TileStyle {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.TileStyle"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_TileStyle as TileStyle;
    impl crate::value::ToValue for TileStyle_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.border {
                properties.insert("Border".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-typography.html
    pub struct Typography_ {
        pub font_families: Option<Vec<Font_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_Typography {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.Typography"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_Typography as Typography;
    impl crate::value::ToValue for Typography_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.font_families {
                properties.insert(
                    "FontFamilies".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-uicolorpalette.html
    pub struct UIColorPalette_ {
        pub accent: Option<crate::value::ExpString>,
        pub accent_foreground: Option<crate::value::ExpString>,
        pub danger: Option<crate::value::ExpString>,
        pub danger_foreground: Option<crate::value::ExpString>,
        pub dimension: Option<crate::value::ExpString>,
        pub dimension_foreground: Option<crate::value::ExpString>,
        pub measure: Option<crate::value::ExpString>,
        pub measure_foreground: Option<crate::value::ExpString>,
        pub primary_background: Option<crate::value::ExpString>,
        pub primary_foreground: Option<crate::value::ExpString>,
        pub secondary_background: Option<crate::value::ExpString>,
        pub secondary_foreground: Option<crate::value::ExpString>,
        pub success: Option<crate::value::ExpString>,
        pub success_foreground: Option<crate::value::ExpString>,
        pub warning: Option<crate::value::ExpString>,
        pub warning_foreground: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Theme_UIColorPalette {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Theme.UIColorPalette"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Theme_UIColorPalette as UIColorPalette;
    impl crate::value::ToValue for UIColorPalette_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.accent {
                properties.insert("Accent".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.accent_foreground {
                properties.insert(
                    "AccentForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.danger {
                properties.insert("Danger".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.danger_foreground {
                properties.insert(
                    "DangerForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dimension {
                properties.insert(
                    "Dimension".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dimension_foreground {
                properties.insert(
                    "DimensionForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure {
                properties.insert(
                    "Measure".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.measure_foreground {
                properties.insert(
                    "MeasureForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_background {
                properties.insert(
                    "PrimaryBackground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.primary_foreground {
                properties.insert(
                    "PrimaryForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_background {
                properties.insert(
                    "SecondaryBackground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.secondary_foreground {
                properties.insert(
                    "SecondaryForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.success {
                properties.insert(
                    "Success".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.success_foreground {
                properties.insert(
                    "SuccessForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.warning {
                properties.insert(
                    "Warning".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.warning_foreground {
                properties.insert(
                    "WarningForeground".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
}
pub mod topic {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-cellvaluesynonym.html
    pub struct CellValueSynonym_ {
        pub cell_value: Option<crate::value::ExpString>,
        pub synonyms: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_CellValueSynonym {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.CellValueSynonym"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_CellValueSynonym as CellValueSynonym;
    impl crate::value::ToValue for CellValueSynonym_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.cell_value {
                properties.insert(
                    "CellValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.synonyms {
                properties.insert(
                    "Synonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-collectiveconstant.html
    pub struct CollectiveConstant_ {
        pub value_list: Option<Vec<crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_CollectiveConstant {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.CollectiveConstant"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_CollectiveConstant as CollectiveConstant;
    impl crate::value::ToValue for CollectiveConstant_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.value_list {
                properties.insert(
                    "ValueList".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-comparativeorder.html
    pub struct ComparativeOrder_ {
        pub specifed_order: Option<Vec<crate::value::ExpString>>,
        pub treat_undefined_specified_values: Option<crate::value::ExpString>,
        pub use_ordering: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_ComparativeOrder {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.ComparativeOrder"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_ComparativeOrder as ComparativeOrder;
    impl crate::value::ToValue for ComparativeOrder_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.specifed_order {
                properties.insert(
                    "SpecifedOrder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.treat_undefined_specified_values {
                properties.insert(
                    "TreatUndefinedSpecifiedValues".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.use_ordering {
                properties.insert(
                    "UseOrdering".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-custominstructions.html
    pub struct CustomInstructions_ {
        pub custom_instructions_string: crate::value::ExpString,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_CustomInstructions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.CustomInstructions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_CustomInstructions as CustomInstructions;
    impl crate::value::ToValue for CustomInstructions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            properties.insert(
                "CustomInstructionsString".to_string(),
                crate::value::ToValue::to_value(&self.custom_instructions_string),
            );
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-dataaggregation.html
    pub struct DataAggregation_ {
        pub dataset_row_date_granularity: Option<crate::value::ExpString>,
        pub default_date_column_name: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_DataAggregation {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.DataAggregation"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_DataAggregation as DataAggregation;
    impl crate::value::ToValue for DataAggregation_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.dataset_row_date_granularity {
                properties.insert(
                    "DatasetRowDateGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_date_column_name {
                properties.insert(
                    "DefaultDateColumnName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-datasetmetadata.html
    pub struct DatasetMetadata_ {
        pub calculated_fields: Option<Vec<TopicCalculatedField_>>,
        pub columns: Option<Vec<TopicColumn_>>,
        pub data_aggregation: Option<Box<DataAggregation_>>,
        pub dataset_arn: crate::value::ExpString,
        pub dataset_description: Option<crate::value::ExpString>,
        pub dataset_name: Option<crate::value::ExpString>,
        pub filters: Option<Vec<TopicFilter_>>,
        pub named_entities: Option<Vec<TopicNamedEntity_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_DatasetMetadata {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.DatasetMetadata"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_DatasetMetadata as DatasetMetadata;
    impl crate::value::ToValue for DatasetMetadata_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.calculated_fields {
                properties.insert(
                    "CalculatedFields".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.columns {
                properties.insert(
                    "Columns".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.data_aggregation {
                properties.insert(
                    "DataAggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "DatasetArn".to_string(),
                crate::value::ToValue::to_value(&self.dataset_arn),
            );
            if let Some(ref value) = self.dataset_description {
                properties.insert(
                    "DatasetDescription".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.dataset_name {
                properties.insert(
                    "DatasetName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filters {
                properties.insert(
                    "Filters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.named_entities {
                properties.insert(
                    "NamedEntities".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-defaultformatting.html
    pub struct DefaultFormatting_ {
        pub display_format: Option<crate::value::ExpString>,
        pub display_format_options: Option<Box<DisplayFormatOptions_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_DefaultFormatting {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.DefaultFormatting"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_DefaultFormatting as DefaultFormatting;
    impl crate::value::ToValue for DefaultFormatting_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.display_format {
                properties.insert(
                    "DisplayFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.display_format_options {
                properties.insert(
                    "DisplayFormatOptions".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-displayformatoptions.html
    pub struct DisplayFormatOptions_ {
        pub blank_cell_format: Option<crate::value::ExpString>,
        pub currency_symbol: Option<crate::value::ExpString>,
        pub date_format: Option<crate::value::ExpString>,
        pub decimal_separator: Option<crate::value::ExpString>,
        pub fraction_digits: Option<f64>,
        pub grouping_separator: Option<crate::value::ExpString>,
        pub negative_format: Option<Box<NegativeFormat_>>,
        pub prefix: Option<crate::value::ExpString>,
        pub suffix: Option<crate::value::ExpString>,
        pub unit_scaler: Option<crate::value::ExpString>,
        pub use_blank_cell_format: Option<crate::value::ExpBool>,
        pub use_grouping: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_DisplayFormatOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.DisplayFormatOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_DisplayFormatOptions as DisplayFormatOptions;
    impl crate::value::ToValue for DisplayFormatOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.blank_cell_format {
                properties.insert(
                    "BlankCellFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.currency_symbol {
                properties.insert(
                    "CurrencySymbol".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_format {
                properties.insert(
                    "DateFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.decimal_separator {
                properties.insert(
                    "DecimalSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.fraction_digits {
                properties.insert(
                    "FractionDigits".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.grouping_separator {
                properties.insert(
                    "GroupingSeparator".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.negative_format {
                properties.insert(
                    "NegativeFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.unit_scaler {
                properties.insert(
                    "UnitScaler".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.use_blank_cell_format {
                properties.insert(
                    "UseBlankCellFormat".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.use_grouping {
                properties.insert(
                    "UseGrouping".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-namedentitydefinition.html
    pub struct NamedEntityDefinition_ {
        pub field_name: Option<crate::value::ExpString>,
        pub metric: Option<Box<NamedEntityDefinitionMetric_>>,
        pub property_name: Option<crate::value::ExpString>,
        pub property_role: Option<crate::value::ExpString>,
        pub property_usage: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_NamedEntityDefinition {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.NamedEntityDefinition"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_NamedEntityDefinition as NamedEntityDefinition;
    impl crate::value::ToValue for NamedEntityDefinition_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.field_name {
                properties.insert(
                    "FieldName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.metric {
                properties.insert("Metric".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.property_name {
                properties.insert(
                    "PropertyName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.property_role {
                properties.insert(
                    "PropertyRole".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.property_usage {
                properties.insert(
                    "PropertyUsage".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-namedentitydefinitionmetric.html
    pub struct NamedEntityDefinitionMetric_ {
        pub aggregation: Option<crate::value::ExpString>,
        pub aggregation_function_parameters:
            Option<std::collections::BTreeMap<String, crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_NamedEntityDefinitionMetric {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.NamedEntityDefinitionMetric"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_NamedEntityDefinitionMetric as NamedEntityDefinitionMetric;
    impl crate::value::ToValue for NamedEntityDefinitionMetric_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.aggregation_function_parameters {
                properties.insert(
                    "AggregationFunctionParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-negativeformat.html
    pub struct NegativeFormat_ {
        pub prefix: Option<crate::value::ExpString>,
        pub suffix: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_NegativeFormat {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.NegativeFormat"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_NegativeFormat as NegativeFormat;
    impl crate::value::ToValue for NegativeFormat_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.prefix {
                properties.insert("Prefix".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.suffix {
                properties.insert("Suffix".to_string(), crate::value::ToValue::to_value(value));
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-rangeconstant.html
    pub struct RangeConstant_ {
        pub maximum: Option<crate::value::ExpString>,
        pub minimum: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_RangeConstant {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.RangeConstant"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_RangeConstant as RangeConstant;
    impl crate::value::ToValue for RangeConstant_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.maximum {
                properties.insert(
                    "Maximum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.minimum {
                properties.insert(
                    "Minimum".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-semanticentitytype.html
    pub struct SemanticEntityType_ {
        pub sub_type_name: Option<crate::value::ExpString>,
        pub type_name: Option<crate::value::ExpString>,
        pub type_parameters: Option<std::collections::BTreeMap<String, crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_SemanticEntityType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.SemanticEntityType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_SemanticEntityType as SemanticEntityType;
    impl crate::value::ToValue for SemanticEntityType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.sub_type_name {
                properties.insert(
                    "SubTypeName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.type_name {
                properties.insert(
                    "TypeName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.type_parameters {
                properties.insert(
                    "TypeParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-semantictype.html
    pub struct SemanticType_ {
        pub falsey_cell_value: Option<crate::value::ExpString>,
        pub falsey_cell_value_synonyms: Option<Vec<crate::value::ExpString>>,
        pub sub_type_name: Option<crate::value::ExpString>,
        pub truthy_cell_value: Option<crate::value::ExpString>,
        pub truthy_cell_value_synonyms: Option<Vec<crate::value::ExpString>>,
        pub type_name: Option<crate::value::ExpString>,
        pub type_parameters: Option<std::collections::BTreeMap<String, crate::value::ExpString>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_SemanticType {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.SemanticType"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_SemanticType as SemanticType;
    impl crate::value::ToValue for SemanticType_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.falsey_cell_value {
                properties.insert(
                    "FalseyCellValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.falsey_cell_value_synonyms {
                properties.insert(
                    "FalseyCellValueSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.sub_type_name {
                properties.insert(
                    "SubTypeName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.truthy_cell_value {
                properties.insert(
                    "TruthyCellValue".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.truthy_cell_value_synonyms {
                properties.insert(
                    "TruthyCellValueSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.type_name {
                properties.insert(
                    "TypeName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.type_parameters {
                properties.insert(
                    "TypeParameters".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topiccalculatedfield.html
    pub struct TopicCalculatedField_ {
        pub aggregation: Option<crate::value::ExpString>,
        pub allowed_aggregations: Option<Vec<crate::value::ExpString>>,
        pub calculated_field_description: Option<crate::value::ExpString>,
        pub calculated_field_name: crate::value::ExpString,
        pub calculated_field_synonyms: Option<Vec<crate::value::ExpString>>,
        pub cell_value_synonyms: Option<Vec<CellValueSynonym_>>,
        pub column_data_role: Option<crate::value::ExpString>,
        pub comparative_order: Option<Box<ComparativeOrder_>>,
        pub default_formatting: Option<Box<DefaultFormatting_>>,
        pub disable_indexing: Option<crate::value::ExpBool>,
        pub expression: crate::value::ExpString,
        pub is_included_in_topic: Option<crate::value::ExpBool>,
        pub never_aggregate_in_filter: Option<crate::value::ExpBool>,
        pub non_additive: Option<crate::value::ExpBool>,
        pub not_allowed_aggregations: Option<Vec<crate::value::ExpString>>,
        pub semantic_type: Option<Box<SemanticType_>>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicCalculatedField {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicCalculatedField"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicCalculatedField as TopicCalculatedField;
    impl crate::value::ToValue for TopicCalculatedField_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.allowed_aggregations {
                properties.insert(
                    "AllowedAggregations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.calculated_field_description {
                properties.insert(
                    "CalculatedFieldDescription".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "CalculatedFieldName".to_string(),
                crate::value::ToValue::to_value(&self.calculated_field_name),
            );
            if let Some(ref value) = self.calculated_field_synonyms {
                properties.insert(
                    "CalculatedFieldSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.cell_value_synonyms {
                properties.insert(
                    "CellValueSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_data_role {
                properties.insert(
                    "ColumnDataRole".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparative_order {
                properties.insert(
                    "ComparativeOrder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_formatting {
                properties.insert(
                    "DefaultFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.disable_indexing {
                properties.insert(
                    "DisableIndexing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "Expression".to_string(),
                crate::value::ToValue::to_value(&self.expression),
            );
            if let Some(ref value) = self.is_included_in_topic {
                properties.insert(
                    "IsIncludedInTopic".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.never_aggregate_in_filter {
                properties.insert(
                    "NeverAggregateInFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.non_additive {
                properties.insert(
                    "NonAdditive".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.not_allowed_aggregations {
                properties.insert(
                    "NotAllowedAggregations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.semantic_type {
                properties.insert(
                    "SemanticType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topiccategoryfilter.html
    pub struct TopicCategoryFilter_ {
        pub category_filter_function: Option<crate::value::ExpString>,
        pub category_filter_type: Option<crate::value::ExpString>,
        pub constant: Option<Box<TopicCategoryFilterConstant_>>,
        pub inverse: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicCategoryFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicCategoryFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicCategoryFilter as TopicCategoryFilter;
    impl crate::value::ToValue for TopicCategoryFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter_function {
                properties.insert(
                    "CategoryFilterFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.category_filter_type {
                properties.insert(
                    "CategoryFilterType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.constant {
                properties.insert(
                    "Constant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.inverse {
                properties.insert(
                    "Inverse".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topiccategoryfilterconstant.html
    pub struct TopicCategoryFilterConstant_ {
        pub collective_constant: Option<Box<CollectiveConstant_>>,
        pub constant_type: Option<crate::value::ExpString>,
        pub singular_constant: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicCategoryFilterConstant {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicCategoryFilterConstant"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicCategoryFilterConstant as TopicCategoryFilterConstant;
    impl crate::value::ToValue for TopicCategoryFilterConstant_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.collective_constant {
                properties.insert(
                    "CollectiveConstant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.constant_type {
                properties.insert(
                    "ConstantType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.singular_constant {
                properties.insert(
                    "SingularConstant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topiccolumn.html
    pub struct TopicColumn_ {
        pub aggregation: Option<crate::value::ExpString>,
        pub allowed_aggregations: Option<Vec<crate::value::ExpString>>,
        pub cell_value_synonyms: Option<Vec<CellValueSynonym_>>,
        pub column_data_role: Option<crate::value::ExpString>,
        pub column_description: Option<crate::value::ExpString>,
        pub column_friendly_name: Option<crate::value::ExpString>,
        pub column_name: crate::value::ExpString,
        pub column_synonyms: Option<Vec<crate::value::ExpString>>,
        pub comparative_order: Option<Box<ComparativeOrder_>>,
        pub default_formatting: Option<Box<DefaultFormatting_>>,
        pub disable_indexing: Option<crate::value::ExpBool>,
        pub is_included_in_topic: Option<crate::value::ExpBool>,
        pub never_aggregate_in_filter: Option<crate::value::ExpBool>,
        pub non_additive: Option<crate::value::ExpBool>,
        pub not_allowed_aggregations: Option<Vec<crate::value::ExpString>>,
        pub semantic_type: Option<Box<SemanticType_>>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicColumn {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicColumn"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicColumn as TopicColumn;
    impl crate::value::ToValue for TopicColumn_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.allowed_aggregations {
                properties.insert(
                    "AllowedAggregations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.cell_value_synonyms {
                properties.insert(
                    "CellValueSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_data_role {
                properties.insert(
                    "ColumnDataRole".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_description {
                properties.insert(
                    "ColumnDescription".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.column_friendly_name {
                properties.insert(
                    "ColumnFriendlyName".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "ColumnName".to_string(),
                crate::value::ToValue::to_value(&self.column_name),
            );
            if let Some(ref value) = self.column_synonyms {
                properties.insert(
                    "ColumnSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.comparative_order {
                properties.insert(
                    "ComparativeOrder".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.default_formatting {
                properties.insert(
                    "DefaultFormatting".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.disable_indexing {
                properties.insert(
                    "DisableIndexing".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.is_included_in_topic {
                properties.insert(
                    "IsIncludedInTopic".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.never_aggregate_in_filter {
                properties.insert(
                    "NeverAggregateInFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.non_additive {
                properties.insert(
                    "NonAdditive".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.not_allowed_aggregations {
                properties.insert(
                    "NotAllowedAggregations".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.semantic_type {
                properties.insert(
                    "SemanticType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicconfigoptions.html
    pub struct TopicConfigOptions_ {
        pub q_business_insights_enabled: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicConfigOptions {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicConfigOptions"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicConfigOptions as TopicConfigOptions;
    impl crate::value::ToValue for TopicConfigOptions_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.q_business_insights_enabled {
                properties.insert(
                    "QBusinessInsightsEnabled".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicdaterangefilter.html
    pub struct TopicDateRangeFilter_ {
        pub constant: Option<Box<TopicRangeFilterConstant_>>,
        pub inclusive: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicDateRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicDateRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicDateRangeFilter as TopicDateRangeFilter;
    impl crate::value::ToValue for TopicDateRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.constant {
                properties.insert(
                    "Constant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.inclusive {
                properties.insert(
                    "Inclusive".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicfilter.html
    pub struct TopicFilter_ {
        pub category_filter: Option<Box<TopicCategoryFilter_>>,
        pub date_range_filter: Option<Box<TopicDateRangeFilter_>>,
        pub filter_class: Option<crate::value::ExpString>,
        pub filter_description: Option<crate::value::ExpString>,
        pub filter_name: crate::value::ExpString,
        pub filter_synonyms: Option<Vec<crate::value::ExpString>>,
        pub filter_type: Option<crate::value::ExpString>,
        pub numeric_equality_filter: Option<Box<TopicNumericEqualityFilter_>>,
        pub numeric_range_filter: Option<Box<TopicNumericRangeFilter_>>,
        pub operand_field_name: crate::value::ExpString,
        pub relative_date_filter: Option<Box<TopicRelativeDateFilter_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicFilter as TopicFilter;
    impl crate::value::ToValue for TopicFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.category_filter {
                properties.insert(
                    "CategoryFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.date_range_filter {
                properties.insert(
                    "DateRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_class {
                properties.insert(
                    "FilterClass".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_description {
                properties.insert(
                    "FilterDescription".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "FilterName".to_string(),
                crate::value::ToValue::to_value(&self.filter_name),
            );
            if let Some(ref value) = self.filter_synonyms {
                properties.insert(
                    "FilterSynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.filter_type {
                properties.insert(
                    "FilterType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_equality_filter {
                properties.insert(
                    "NumericEqualityFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.numeric_range_filter {
                properties.insert(
                    "NumericRangeFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "OperandFieldName".to_string(),
                crate::value::ToValue::to_value(&self.operand_field_name),
            );
            if let Some(ref value) = self.relative_date_filter {
                properties.insert(
                    "RelativeDateFilter".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicnamedentity.html
    pub struct TopicNamedEntity_ {
        pub definition: Option<Vec<NamedEntityDefinition_>>,
        pub entity_description: Option<crate::value::ExpString>,
        pub entity_name: crate::value::ExpString,
        pub entity_synonyms: Option<Vec<crate::value::ExpString>>,
        pub semantic_entity_type: Option<Box<SemanticEntityType_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicNamedEntity {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicNamedEntity"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicNamedEntity as TopicNamedEntity;
    impl crate::value::ToValue for TopicNamedEntity_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.definition {
                properties.insert(
                    "Definition".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.entity_description {
                properties.insert(
                    "EntityDescription".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.insert(
                "EntityName".to_string(),
                crate::value::ToValue::to_value(&self.entity_name),
            );
            if let Some(ref value) = self.entity_synonyms {
                properties.insert(
                    "EntitySynonyms".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.semantic_entity_type {
                properties.insert(
                    "SemanticEntityType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicnumericequalityfilter.html
    pub struct TopicNumericEqualityFilter_ {
        pub aggregation: Option<crate::value::ExpString>,
        pub constant: Option<Box<TopicSingularFilterConstant_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicNumericEqualityFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicNumericEqualityFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicNumericEqualityFilter as TopicNumericEqualityFilter;
    impl crate::value::ToValue for TopicNumericEqualityFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.constant {
                properties.insert(
                    "Constant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicnumericrangefilter.html
    pub struct TopicNumericRangeFilter_ {
        pub aggregation: Option<crate::value::ExpString>,
        pub constant: Option<Box<TopicRangeFilterConstant_>>,
        pub inclusive: Option<crate::value::ExpBool>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicNumericRangeFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicNumericRangeFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicNumericRangeFilter as TopicNumericRangeFilter;
    impl crate::value::ToValue for TopicNumericRangeFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.aggregation {
                properties.insert(
                    "Aggregation".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.constant {
                properties.insert(
                    "Constant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.inclusive {
                properties.insert(
                    "Inclusive".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicrangefilterconstant.html
    pub struct TopicRangeFilterConstant_ {
        pub constant_type: Option<crate::value::ExpString>,
        pub range_constant: Option<Box<RangeConstant_>>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicRangeFilterConstant {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicRangeFilterConstant"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicRangeFilterConstant as TopicRangeFilterConstant;
    impl crate::value::ToValue for TopicRangeFilterConstant_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.constant_type {
                properties.insert(
                    "ConstantType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.range_constant {
                properties.insert(
                    "RangeConstant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicrelativedatefilter.html
    pub struct TopicRelativeDateFilter_ {
        pub constant: Option<Box<TopicSingularFilterConstant_>>,
        pub relative_date_filter_function: Option<crate::value::ExpString>,
        pub time_granularity: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicRelativeDateFilter {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicRelativeDateFilter"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicRelativeDateFilter as TopicRelativeDateFilter;
    impl crate::value::ToValue for TopicRelativeDateFilter_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.constant {
                properties.insert(
                    "Constant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.relative_date_filter_function {
                properties.insert(
                    "RelativeDateFilterFunction".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.time_granularity {
                properties.insert(
                    "TimeGranularity".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-topic-topicsingularfilterconstant.html
    pub struct TopicSingularFilterConstant_ {
        pub constant_type: Option<crate::value::ExpString>,
        pub singular_constant: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_Topic_TopicSingularFilterConstant {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::Topic.TopicSingularFilterConstant"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_Topic_TopicSingularFilterConstant as TopicSingularFilterConstant;
    impl crate::value::ToValue for TopicSingularFilterConstant_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.constant_type {
                properties.insert(
                    "ConstantType".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.singular_constant {
                properties.insert(
                    "SingularConstant".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
}
pub mod vpcconnection {
    ///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-vpcconnection-networkinterface.html
    pub struct NetworkInterface_ {
        pub availability_zone: Option<crate::value::ExpString>,
        pub error_message: Option<crate::value::ExpString>,
        pub network_interface_id: Option<crate::value::ExpString>,
        pub status: Option<crate::value::ExpString>,
        pub subnet_id: Option<crate::value::ExpString>,
    }
    #[doc(hidden)]
    #[macro_export]
    macro_rules! __aws_quicksight_VPCConnection_NetworkInterface {
        ($($field:ident : $value:expr),* $(,)?) => {
            stratosphere::generator::construct_property_type!("AWS::QuickSight::VPCConnection.NetworkInterface"
            $($field $value)*)
        };
    }
    pub use crate::__aws_quicksight_VPCConnection_NetworkInterface as NetworkInterface;
    impl crate::value::ToValue for NetworkInterface_ {
        fn to_value(&self) -> serde_json::Value {
            let mut properties = serde_json::Map::new();
            if let Some(ref value) = self.availability_zone {
                properties.insert(
                    "AvailabilityZone".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.error_message {
                properties.insert(
                    "ErrorMessage".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.network_interface_id {
                properties.insert(
                    "NetworkInterfaceId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            if let Some(ref value) = self.status {
                properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
            }
            if let Some(ref value) = self.subnet_id {
                properties.insert(
                    "SubnetId".to_string(),
                    crate::value::ToValue::to_value(value),
                );
            }
            properties.into()
        }
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-actionconnector.html
pub struct ActionConnector_ {
    pub action_connector_id: crate::value::ExpString,
    pub authentication_config: Option<super::quicksight::actionconnector::AuthConfig_>,
    pub aws_account_id: crate::value::ExpString,
    pub description: Option<crate::value::ExpString>,
    pub name: crate::value::ExpString,
    pub permissions: Option<Vec<super::quicksight::actionconnector::ResourcePermission_>>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub r#type: crate::value::ExpString,
    pub vpc_connection_arn: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_ActionConnector {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::ActionConnector"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_ActionConnector as ActionConnector;
impl crate::template::ToResource for ActionConnector_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("ActionConnector"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        properties.insert(
            "ActionConnectorId".to_string(),
            crate::value::ToValue::to_value(&self.action_connector_id),
        );
        if let Some(ref value) = self.authentication_config {
            properties.insert(
                "AuthenticationConfig".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties.insert(
            "AwsAccountId".to_string(),
            crate::value::ToValue::to_value(&self.aws_account_id),
        );
        if let Some(ref value) = self.description {
            properties.insert(
                "Description".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties.insert(
            "Name".to_string(),
            crate::value::ToValue::to_value(&self.name),
        );
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        properties.insert(
            "Type".to_string(),
            crate::value::ToValue::to_value(&self.r#type),
        );
        if let Some(ref value) = self.vpc_connection_arn {
            properties.insert(
                "VpcConnectionArn".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-analysis.html
pub struct Analysis_ {
    pub analysis_id: crate::value::ExpString,
    pub aws_account_id: crate::value::ExpString,
    pub definition: Option<super::quicksight::analysis::AnalysisDefinition_>,
    pub errors: Option<Vec<super::quicksight::analysis::AnalysisError_>>,
    pub folder_arns: Option<Vec<crate::value::ExpString>>,
    pub name: crate::value::ExpString,
    pub parameters: Option<super::quicksight::analysis::Parameters_>,
    pub permissions: Option<Vec<super::quicksight::analysis::ResourcePermission_>>,
    pub sheets: Option<Vec<super::quicksight::analysis::Sheet_>>,
    pub source_entity: Option<super::quicksight::analysis::AnalysisSourceEntity_>,
    pub status: Option<crate::value::ExpString>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub theme_arn: Option<crate::value::ExpString>,
    pub validation_strategy: Option<super::quicksight::analysis::ValidationStrategy_>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_Analysis {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::Analysis"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_Analysis as Analysis;
impl crate::template::ToResource for Analysis_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("Analysis"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        properties.insert(
            "AnalysisId".to_string(),
            crate::value::ToValue::to_value(&self.analysis_id),
        );
        properties.insert(
            "AwsAccountId".to_string(),
            crate::value::ToValue::to_value(&self.aws_account_id),
        );
        if let Some(ref value) = self.definition {
            properties.insert(
                "Definition".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.errors {
            properties.insert("Errors".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.folder_arns {
            properties.insert(
                "FolderArns".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties.insert(
            "Name".to_string(),
            crate::value::ToValue::to_value(&self.name),
        );
        if let Some(ref value) = self.parameters {
            properties.insert(
                "Parameters".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.sheets {
            properties.insert("Sheets".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.source_entity {
            properties.insert(
                "SourceEntity".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.status {
            properties.insert("Status".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.theme_arn {
            properties.insert(
                "ThemeArn".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.validation_strategy {
            properties.insert(
                "ValidationStrategy".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-custompermissions.html
pub struct CustomPermissions_ {
    pub aws_account_id: crate::value::ExpString,
    pub capabilities: Option<super::quicksight::custompermissions::Capabilities_>,
    pub custom_permissions_name: crate::value::ExpString,
    pub tags: Option<Vec<crate::Tag_>>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_CustomPermissions {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::CustomPermissions"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_CustomPermissions as CustomPermissions;
impl crate::template::ToResource for CustomPermissions_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("CustomPermissions"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        properties.insert(
            "AwsAccountId".to_string(),
            crate::value::ToValue::to_value(&self.aws_account_id),
        );
        if let Some(ref value) = self.capabilities {
            properties.insert(
                "Capabilities".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties.insert(
            "CustomPermissionsName".to_string(),
            crate::value::ToValue::to_value(&self.custom_permissions_name),
        );
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dashboard.html
pub struct Dashboard_ {
    pub aws_account_id: crate::value::ExpString,
    pub dashboard_id: crate::value::ExpString,
    pub dashboard_publish_options: Option<super::quicksight::dashboard::DashboardPublishOptions_>,
    pub definition: Option<super::quicksight::dashboard::DashboardVersionDefinition_>,
    pub folder_arns: Option<Vec<crate::value::ExpString>>,
    pub link_entities: Option<Vec<crate::value::ExpString>>,
    pub link_sharing_configuration: Option<super::quicksight::dashboard::LinkSharingConfiguration_>,
    pub name: crate::value::ExpString,
    pub parameters: Option<super::quicksight::dashboard::Parameters_>,
    pub permissions: Option<Vec<super::quicksight::dashboard::ResourcePermission_>>,
    pub source_entity: Option<super::quicksight::dashboard::DashboardSourceEntity_>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub theme_arn: Option<crate::value::ExpString>,
    pub validation_strategy: Option<super::quicksight::dashboard::ValidationStrategy_>,
    pub version_description: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_Dashboard {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::Dashboard"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_Dashboard as Dashboard;
impl crate::template::ToResource for Dashboard_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("Dashboard"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        properties.insert(
            "AwsAccountId".to_string(),
            crate::value::ToValue::to_value(&self.aws_account_id),
        );
        properties.insert(
            "DashboardId".to_string(),
            crate::value::ToValue::to_value(&self.dashboard_id),
        );
        if let Some(ref value) = self.dashboard_publish_options {
            properties.insert(
                "DashboardPublishOptions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.definition {
            properties.insert(
                "Definition".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.folder_arns {
            properties.insert(
                "FolderArns".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.link_entities {
            properties.insert(
                "LinkEntities".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.link_sharing_configuration {
            properties.insert(
                "LinkSharingConfiguration".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties.insert(
            "Name".to_string(),
            crate::value::ToValue::to_value(&self.name),
        );
        if let Some(ref value) = self.parameters {
            properties.insert(
                "Parameters".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.source_entity {
            properties.insert(
                "SourceEntity".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.theme_arn {
            properties.insert(
                "ThemeArn".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.validation_strategy {
            properties.insert(
                "ValidationStrategy".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.version_description {
            properties.insert(
                "VersionDescription".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dataset.html
pub struct DataSet_ {
    pub aws_account_id: Option<crate::value::ExpString>,
    pub column_groups: Option<Vec<super::quicksight::dataset::ColumnGroup_>>,
    pub column_level_permission_rules:
        Option<Vec<super::quicksight::dataset::ColumnLevelPermissionRule_>>,
    pub data_prep_configuration: Option<super::quicksight::dataset::DataPrepConfiguration_>,
    pub data_set_id: Option<crate::value::ExpString>,
    pub data_set_refresh_properties: Option<super::quicksight::dataset::DataSetRefreshProperties_>,
    pub data_set_usage_configuration:
        Option<super::quicksight::dataset::DataSetUsageConfiguration_>,
    pub dataset_parameters: Option<Vec<super::quicksight::dataset::DatasetParameter_>>,
    pub field_folders:
        Option<std::collections::BTreeMap<String, super::quicksight::dataset::FieldFolder_>>,
    pub folder_arns: Option<Vec<crate::value::ExpString>>,
    pub import_mode: Option<crate::value::ExpString>,
    pub ingestion_wait_policy: Option<super::quicksight::dataset::IngestionWaitPolicy_>,
    pub name: Option<crate::value::ExpString>,
    pub performance_configuration: Option<super::quicksight::dataset::PerformanceConfiguration_>,
    pub permissions: Option<Vec<super::quicksight::dataset::ResourcePermission_>>,
    pub physical_table_map:
        Option<std::collections::BTreeMap<String, super::quicksight::dataset::PhysicalTable_>>,
    pub semantic_model_configuration:
        Option<super::quicksight::dataset::SemanticModelConfiguration_>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub use_as: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_DataSet {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::DataSet"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_DataSet as DataSet;
impl crate::template::ToResource for DataSet_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("DataSet"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        if let Some(ref value) = self.aws_account_id {
            properties.insert(
                "AwsAccountId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.column_groups {
            properties.insert(
                "ColumnGroups".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.column_level_permission_rules {
            properties.insert(
                "ColumnLevelPermissionRules".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_prep_configuration {
            properties.insert(
                "DataPrepConfiguration".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_set_id {
            properties.insert(
                "DataSetId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_set_refresh_properties {
            properties.insert(
                "DataSetRefreshProperties".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_set_usage_configuration {
            properties.insert(
                "DataSetUsageConfiguration".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.dataset_parameters {
            properties.insert(
                "DatasetParameters".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.field_folders {
            properties.insert(
                "FieldFolders".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.folder_arns {
            properties.insert(
                "FolderArns".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.import_mode {
            properties.insert(
                "ImportMode".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.ingestion_wait_policy {
            properties.insert(
                "IngestionWaitPolicy".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.name {
            properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.performance_configuration {
            properties.insert(
                "PerformanceConfiguration".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.physical_table_map {
            properties.insert(
                "PhysicalTableMap".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.semantic_model_configuration {
            properties.insert(
                "SemanticModelConfiguration".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.use_as {
            properties.insert("UseAs".to_string(), crate::value::ToValue::to_value(value));
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-datasource.html
pub struct DataSource_ {
    pub alternate_data_source_parameters:
        Option<Vec<super::quicksight::datasource::DataSourceParameters_>>,
    pub aws_account_id: Option<crate::value::ExpString>,
    pub credentials: Option<super::quicksight::datasource::DataSourceCredentials_>,
    pub data_source_id: Option<crate::value::ExpString>,
    pub data_source_parameters: Option<super::quicksight::datasource::DataSourceParameters_>,
    pub error_info: Option<super::quicksight::datasource::DataSourceErrorInfo_>,
    pub folder_arns: Option<Vec<crate::value::ExpString>>,
    pub name: crate::value::ExpString,
    pub permissions: Option<Vec<super::quicksight::datasource::ResourcePermission_>>,
    pub ssl_properties: Option<super::quicksight::datasource::SslProperties_>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub r#type: crate::value::ExpString,
    pub vpc_connection_properties: Option<super::quicksight::datasource::VpcConnectionProperties_>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_DataSource {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::DataSource"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_DataSource as DataSource;
impl crate::template::ToResource for DataSource_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("DataSource"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        if let Some(ref value) = self.alternate_data_source_parameters {
            properties.insert(
                "AlternateDataSourceParameters".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.aws_account_id {
            properties.insert(
                "AwsAccountId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.credentials {
            properties.insert(
                "Credentials".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_source_id {
            properties.insert(
                "DataSourceId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_source_parameters {
            properties.insert(
                "DataSourceParameters".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.error_info {
            properties.insert(
                "ErrorInfo".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.folder_arns {
            properties.insert(
                "FolderArns".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties.insert(
            "Name".to_string(),
            crate::value::ToValue::to_value(&self.name),
        );
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.ssl_properties {
            properties.insert(
                "SslProperties".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        properties.insert(
            "Type".to_string(),
            crate::value::ToValue::to_value(&self.r#type),
        );
        if let Some(ref value) = self.vpc_connection_properties {
            properties.insert(
                "VpcConnectionProperties".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-folder.html
pub struct Folder_ {
    pub aws_account_id: Option<crate::value::ExpString>,
    pub folder_id: Option<crate::value::ExpString>,
    pub folder_type: Option<crate::value::ExpString>,
    pub name: Option<crate::value::ExpString>,
    pub parent_folder_arn: Option<crate::value::ExpString>,
    pub permissions: Option<Vec<super::quicksight::folder::ResourcePermission_>>,
    pub sharing_model: Option<crate::value::ExpString>,
    pub tags: Option<Vec<crate::Tag_>>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_Folder {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::Folder"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_Folder as Folder;
impl crate::template::ToResource for Folder_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("Folder"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        if let Some(ref value) = self.aws_account_id {
            properties.insert(
                "AwsAccountId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.folder_id {
            properties.insert(
                "FolderId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.folder_type {
            properties.insert(
                "FolderType".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.name {
            properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.parent_folder_arn {
            properties.insert(
                "ParentFolderArn".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.sharing_model {
            properties.insert(
                "SharingModel".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-refreshschedule.html
pub struct RefreshSchedule_ {
    pub aws_account_id: Option<crate::value::ExpString>,
    pub data_set_id: Option<crate::value::ExpString>,
    pub schedule: Option<super::quicksight::refreshschedule::RefreshScheduleMap_>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_RefreshSchedule {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::RefreshSchedule"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_RefreshSchedule as RefreshSchedule;
impl crate::template::ToResource for RefreshSchedule_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("RefreshSchedule"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        if let Some(ref value) = self.aws_account_id {
            properties.insert(
                "AwsAccountId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_set_id {
            properties.insert(
                "DataSetId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.schedule {
            properties.insert(
                "Schedule".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-template.html
pub struct Template_ {
    pub aws_account_id: crate::value::ExpString,
    pub definition: Option<super::quicksight::template::TemplateVersionDefinition_>,
    pub name: Option<crate::value::ExpString>,
    pub permissions: Option<Vec<super::quicksight::template::ResourcePermission_>>,
    pub source_entity: Option<super::quicksight::template::TemplateSourceEntity_>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub template_id: crate::value::ExpString,
    pub validation_strategy: Option<super::quicksight::template::ValidationStrategy_>,
    pub version_description: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_Template {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::Template"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_Template as Template;
impl crate::template::ToResource for Template_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("Template"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        properties.insert(
            "AwsAccountId".to_string(),
            crate::value::ToValue::to_value(&self.aws_account_id),
        );
        if let Some(ref value) = self.definition {
            properties.insert(
                "Definition".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.name {
            properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.source_entity {
            properties.insert(
                "SourceEntity".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        properties.insert(
            "TemplateId".to_string(),
            crate::value::ToValue::to_value(&self.template_id),
        );
        if let Some(ref value) = self.validation_strategy {
            properties.insert(
                "ValidationStrategy".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.version_description {
            properties.insert(
                "VersionDescription".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-theme.html
pub struct Theme_ {
    pub aws_account_id: crate::value::ExpString,
    pub base_theme_id: crate::value::ExpString,
    pub configuration: super::quicksight::theme::ThemeConfiguration_,
    pub name: crate::value::ExpString,
    pub permissions: Option<Vec<super::quicksight::theme::ResourcePermission_>>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub theme_id: crate::value::ExpString,
    pub version_description: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_Theme {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::Theme"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_Theme as Theme;
impl crate::template::ToResource for Theme_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("Theme"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        properties.insert(
            "AwsAccountId".to_string(),
            crate::value::ToValue::to_value(&self.aws_account_id),
        );
        properties.insert(
            "BaseThemeId".to_string(),
            crate::value::ToValue::to_value(&self.base_theme_id),
        );
        properties.insert(
            "Configuration".to_string(),
            crate::value::ToValue::to_value(&self.configuration),
        );
        properties.insert(
            "Name".to_string(),
            crate::value::ToValue::to_value(&self.name),
        );
        if let Some(ref value) = self.permissions {
            properties.insert(
                "Permissions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        properties.insert(
            "ThemeId".to_string(),
            crate::value::ToValue::to_value(&self.theme_id),
        );
        if let Some(ref value) = self.version_description {
            properties.insert(
                "VersionDescription".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-topic.html
pub struct Topic_ {
    pub aws_account_id: Option<crate::value::ExpString>,
    pub config_options: Option<super::quicksight::topic::TopicConfigOptions_>,
    pub custom_instructions: Option<super::quicksight::topic::CustomInstructions_>,
    pub data_sets: Option<Vec<super::quicksight::topic::DatasetMetadata_>>,
    pub description: Option<crate::value::ExpString>,
    pub folder_arns: Option<Vec<crate::value::ExpString>>,
    pub name: Option<crate::value::ExpString>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub topic_id: Option<crate::value::ExpString>,
    pub user_experience_version: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_Topic {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::Topic"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_Topic as Topic;
impl crate::template::ToResource for Topic_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("Topic"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        if let Some(ref value) = self.aws_account_id {
            properties.insert(
                "AwsAccountId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.config_options {
            properties.insert(
                "ConfigOptions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.custom_instructions {
            properties.insert(
                "CustomInstructions".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.data_sets {
            properties.insert(
                "DataSets".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.description {
            properties.insert(
                "Description".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.folder_arns {
            properties.insert(
                "FolderArns".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.name {
            properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.topic_id {
            properties.insert(
                "TopicId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.user_experience_version {
            properties.insert(
                "UserExperienceVersion".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
///http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-vpcconnection.html
pub struct VPCConnection_ {
    pub availability_status: Option<crate::value::ExpString>,
    pub aws_account_id: Option<crate::value::ExpString>,
    pub dns_resolvers: Option<Vec<crate::value::ExpString>>,
    pub name: Option<crate::value::ExpString>,
    pub role_arn: Option<crate::value::ExpString>,
    pub security_group_ids: Option<Vec<crate::value::ExpString>>,
    pub subnet_ids: Option<Vec<crate::value::ExpString>>,
    pub tags: Option<Vec<crate::Tag_>>,
    pub vpc_connection_id: Option<crate::value::ExpString>,
}
#[doc(hidden)]
#[macro_export]
macro_rules! __aws_quicksight_VPCConnection {
    ($($field:ident : $value:expr),* $(,)?) => {
        stratosphere::generator::construct_resource_type!("AWS::QuickSight::VPCConnection"
        $($field $value)*)
    };
}
pub use crate::__aws_quicksight_VPCConnection as VPCConnection;
impl crate::template::ToResource for VPCConnection_ {
    const RESOURCE_TYPE_NAME: crate::resource_specification::ResourceTypeName<'static> =
        crate::resource_specification::ResourceTypeName {
            service: crate::resource_specification::ServiceIdentifier {
                service_name: crate::resource_specification::ServiceName("QuickSight"),
                vendor_name: crate::resource_specification::VendorName("AWS"),
            },
            resource_name: crate::resource_specification::ResourceName("VPCConnection"),
        };
    fn to_resource_properties(&self) -> crate::template::ResourceProperties {
        let mut properties = crate::template::ResourceProperties::new();
        if let Some(ref value) = self.availability_status {
            properties.insert(
                "AvailabilityStatus".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.aws_account_id {
            properties.insert(
                "AwsAccountId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.dns_resolvers {
            properties.insert(
                "DnsResolvers".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.name {
            properties.insert("Name".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.role_arn {
            properties.insert(
                "RoleArn".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.security_group_ids {
            properties.insert(
                "SecurityGroupIds".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.subnet_ids {
            properties.insert(
                "SubnetIds".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        if let Some(ref value) = self.tags {
            properties.insert("Tags".to_string(), crate::value::ToValue::to_value(value));
        }
        if let Some(ref value) = self.vpc_connection_id {
            properties.insert(
                "VPCConnectionId".to_string(),
                crate::value::ToValue::to_value(value),
            );
        }
        properties
    }
}
