package awsiot


// Describes a rule.
//
// Example:
//   // The code below shows an example of how to instantiate this type.
//   // The values are placeholders you should change.
//   import "github.com/aws/aws-cdk-go/awscdk"
//
//   topicRulePayloadProperty := &TopicRulePayloadProperty{
//   	Actions: []interface{}{
//   		&ActionProperty{
//   			CloudwatchAlarm: &CloudwatchAlarmActionProperty{
//   				AlarmName: jsii.String("alarmName"),
//   				RoleArn: jsii.String("roleArn"),
//   				StateReason: jsii.String("stateReason"),
//   				StateValue: jsii.String("stateValue"),
//   			},
//   			CloudwatchLogs: &CloudwatchLogsActionProperty{
//   				LogGroupName: jsii.String("logGroupName"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				BatchMode: jsii.Boolean(false),
//   			},
//   			CloudwatchMetric: &CloudwatchMetricActionProperty{
//   				MetricName: jsii.String("metricName"),
//   				MetricNamespace: jsii.String("metricNamespace"),
//   				MetricUnit: jsii.String("metricUnit"),
//   				MetricValue: jsii.String("metricValue"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				MetricTimestamp: jsii.String("metricTimestamp"),
//   			},
//   			DynamoDb: &DynamoDBActionProperty{
//   				HashKeyField: jsii.String("hashKeyField"),
//   				HashKeyValue: jsii.String("hashKeyValue"),
//   				RoleArn: jsii.String("roleArn"),
//   				TableName: jsii.String("tableName"),
//
//   				// the properties below are optional
//   				HashKeyType: jsii.String("hashKeyType"),
//   				PayloadField: jsii.String("payloadField"),
//   				RangeKeyField: jsii.String("rangeKeyField"),
//   				RangeKeyType: jsii.String("rangeKeyType"),
//   				RangeKeyValue: jsii.String("rangeKeyValue"),
//   			},
//   			DynamoDBv2: &DynamoDBv2ActionProperty{
//   				PutItem: &PutItemInputProperty{
//   					TableName: jsii.String("tableName"),
//   				},
//   				RoleArn: jsii.String("roleArn"),
//   			},
//   			Elasticsearch: &ElasticsearchActionProperty{
//   				Endpoint: jsii.String("endpoint"),
//   				Id: jsii.String("id"),
//   				Index: jsii.String("index"),
//   				RoleArn: jsii.String("roleArn"),
//   				Type: jsii.String("type"),
//   			},
//   			Firehose: &FirehoseActionProperty{
//   				DeliveryStreamName: jsii.String("deliveryStreamName"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				BatchMode: jsii.Boolean(false),
//   				Separator: jsii.String("separator"),
//   			},
//   			Http: &HttpActionProperty{
//   				Url: jsii.String("url"),
//
//   				// the properties below are optional
//   				Auth: &HttpAuthorizationProperty{
//   					Sigv4: &SigV4AuthorizationProperty{
//   						RoleArn: jsii.String("roleArn"),
//   						ServiceName: jsii.String("serviceName"),
//   						SigningRegion: jsii.String("signingRegion"),
//   					},
//   				},
//   				ConfirmationUrl: jsii.String("confirmationUrl"),
//   				Headers: []interface{}{
//   					&HttpActionHeaderProperty{
//   						Key: jsii.String("key"),
//   						Value: jsii.String("value"),
//   					},
//   				},
//   			},
//   			IotAnalytics: &IotAnalyticsActionProperty{
//   				ChannelName: jsii.String("channelName"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				BatchMode: jsii.Boolean(false),
//   			},
//   			IotEvents: &IotEventsActionProperty{
//   				InputName: jsii.String("inputName"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				BatchMode: jsii.Boolean(false),
//   				MessageId: jsii.String("messageId"),
//   			},
//   			IotSiteWise: &IotSiteWiseActionProperty{
//   				PutAssetPropertyValueEntries: []interface{}{
//   					&PutAssetPropertyValueEntryProperty{
//   						PropertyValues: []interface{}{
//   							&AssetPropertyValueProperty{
//   								Timestamp: &AssetPropertyTimestampProperty{
//   									TimeInSeconds: jsii.String("timeInSeconds"),
//
//   									// the properties below are optional
//   									OffsetInNanos: jsii.String("offsetInNanos"),
//   								},
//   								Value: &AssetPropertyVariantProperty{
//   									BooleanValue: jsii.String("booleanValue"),
//   									DoubleValue: jsii.String("doubleValue"),
//   									IntegerValue: jsii.String("integerValue"),
//   									StringValue: jsii.String("stringValue"),
//   								},
//
//   								// the properties below are optional
//   								Quality: jsii.String("quality"),
//   							},
//   						},
//
//   						// the properties below are optional
//   						AssetId: jsii.String("assetId"),
//   						EntryId: jsii.String("entryId"),
//   						PropertyAlias: jsii.String("propertyAlias"),
//   						PropertyId: jsii.String("propertyId"),
//   					},
//   				},
//   				RoleArn: jsii.String("roleArn"),
//   			},
//   			Kafka: &KafkaActionProperty{
//   				ClientProperties: map[string]*string{
//   					"clientPropertiesKey": jsii.String("clientProperties"),
//   				},
//   				DestinationArn: jsii.String("destinationArn"),
//   				Topic: jsii.String("topic"),
//
//   				// the properties below are optional
//   				Headers: []interface{}{
//   					&KafkaActionHeaderProperty{
//   						Key: jsii.String("key"),
//   						Value: jsii.String("value"),
//   					},
//   				},
//   				Key: jsii.String("key"),
//   				Partition: jsii.String("partition"),
//   			},
//   			Kinesis: &KinesisActionProperty{
//   				RoleArn: jsii.String("roleArn"),
//   				StreamName: jsii.String("streamName"),
//
//   				// the properties below are optional
//   				PartitionKey: jsii.String("partitionKey"),
//   			},
//   			Lambda: &LambdaActionProperty{
//   				FunctionArn: jsii.String("functionArn"),
//   			},
//   			Location: &LocationActionProperty{
//   				DeviceId: jsii.String("deviceId"),
//   				Latitude: jsii.String("latitude"),
//   				Longitude: jsii.String("longitude"),
//   				RoleArn: jsii.String("roleArn"),
//   				TrackerName: jsii.String("trackerName"),
//
//   				// the properties below are optional
//   				Timestamp: &TimestampProperty{
//   					Value: jsii.String("value"),
//
//   					// the properties below are optional
//   					Unit: jsii.String("unit"),
//   				},
//   			},
//   			OpenSearch: &OpenSearchActionProperty{
//   				Endpoint: jsii.String("endpoint"),
//   				Id: jsii.String("id"),
//   				Index: jsii.String("index"),
//   				RoleArn: jsii.String("roleArn"),
//   				Type: jsii.String("type"),
//   			},
//   			Republish: &RepublishActionProperty{
//   				RoleArn: jsii.String("roleArn"),
//   				Topic: jsii.String("topic"),
//
//   				// the properties below are optional
//   				Headers: &RepublishActionHeadersProperty{
//   					ContentType: jsii.String("contentType"),
//   					CorrelationData: jsii.String("correlationData"),
//   					MessageExpiry: jsii.String("messageExpiry"),
//   					PayloadFormatIndicator: jsii.String("payloadFormatIndicator"),
//   					ResponseTopic: jsii.String("responseTopic"),
//   					UserProperties: []interface{}{
//   						&UserPropertyProperty{
//   							Key: jsii.String("key"),
//   							Value: jsii.String("value"),
//   						},
//   					},
//   				},
//   				Qos: jsii.Number(123),
//   			},
//   			S3: &S3ActionProperty{
//   				BucketName: jsii.String("bucketName"),
//   				Key: jsii.String("key"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				CannedAcl: jsii.String("cannedAcl"),
//   			},
//   			Sns: &SnsActionProperty{
//   				RoleArn: jsii.String("roleArn"),
//   				TargetArn: jsii.String("targetArn"),
//
//   				// the properties below are optional
//   				MessageFormat: jsii.String("messageFormat"),
//   			},
//   			Sqs: &SqsActionProperty{
//   				QueueUrl: jsii.String("queueUrl"),
//   				RoleArn: jsii.String("roleArn"),
//
//   				// the properties below are optional
//   				UseBase64: jsii.Boolean(false),
//   			},
//   			StepFunctions: &StepFunctionsActionProperty{
//   				RoleArn: jsii.String("roleArn"),
//   				StateMachineName: jsii.String("stateMachineName"),
//
//   				// the properties below are optional
//   				ExecutionNamePrefix: jsii.String("executionNamePrefix"),
//   			},
//   			Timestream: &TimestreamActionProperty{
//   				DatabaseName: jsii.String("databaseName"),
//   				Dimensions: []interface{}{
//   					&TimestreamDimensionProperty{
//   						Name: jsii.String("name"),
//   						Value: jsii.String("value"),
//   					},
//   				},
//   				RoleArn: jsii.String("roleArn"),
//   				TableName: jsii.String("tableName"),
//
//   				// the properties below are optional
//   				Timestamp: &TimestreamTimestampProperty{
//   					Unit: jsii.String("unit"),
//   					Value: jsii.String("value"),
//   				},
//   			},
//   		},
//   	},
//   	Sql: jsii.String("sql"),
//
//   	// the properties below are optional
//   	AwsIotSqlVersion: jsii.String("awsIotSqlVersion"),
//   	Description: jsii.String("description"),
//   	ErrorAction: &ActionProperty{
//   		CloudwatchAlarm: &CloudwatchAlarmActionProperty{
//   			AlarmName: jsii.String("alarmName"),
//   			RoleArn: jsii.String("roleArn"),
//   			StateReason: jsii.String("stateReason"),
//   			StateValue: jsii.String("stateValue"),
//   		},
//   		CloudwatchLogs: &CloudwatchLogsActionProperty{
//   			LogGroupName: jsii.String("logGroupName"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			BatchMode: jsii.Boolean(false),
//   		},
//   		CloudwatchMetric: &CloudwatchMetricActionProperty{
//   			MetricName: jsii.String("metricName"),
//   			MetricNamespace: jsii.String("metricNamespace"),
//   			MetricUnit: jsii.String("metricUnit"),
//   			MetricValue: jsii.String("metricValue"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			MetricTimestamp: jsii.String("metricTimestamp"),
//   		},
//   		DynamoDb: &DynamoDBActionProperty{
//   			HashKeyField: jsii.String("hashKeyField"),
//   			HashKeyValue: jsii.String("hashKeyValue"),
//   			RoleArn: jsii.String("roleArn"),
//   			TableName: jsii.String("tableName"),
//
//   			// the properties below are optional
//   			HashKeyType: jsii.String("hashKeyType"),
//   			PayloadField: jsii.String("payloadField"),
//   			RangeKeyField: jsii.String("rangeKeyField"),
//   			RangeKeyType: jsii.String("rangeKeyType"),
//   			RangeKeyValue: jsii.String("rangeKeyValue"),
//   		},
//   		DynamoDBv2: &DynamoDBv2ActionProperty{
//   			PutItem: &PutItemInputProperty{
//   				TableName: jsii.String("tableName"),
//   			},
//   			RoleArn: jsii.String("roleArn"),
//   		},
//   		Elasticsearch: &ElasticsearchActionProperty{
//   			Endpoint: jsii.String("endpoint"),
//   			Id: jsii.String("id"),
//   			Index: jsii.String("index"),
//   			RoleArn: jsii.String("roleArn"),
//   			Type: jsii.String("type"),
//   		},
//   		Firehose: &FirehoseActionProperty{
//   			DeliveryStreamName: jsii.String("deliveryStreamName"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			BatchMode: jsii.Boolean(false),
//   			Separator: jsii.String("separator"),
//   		},
//   		Http: &HttpActionProperty{
//   			Url: jsii.String("url"),
//
//   			// the properties below are optional
//   			Auth: &HttpAuthorizationProperty{
//   				Sigv4: &SigV4AuthorizationProperty{
//   					RoleArn: jsii.String("roleArn"),
//   					ServiceName: jsii.String("serviceName"),
//   					SigningRegion: jsii.String("signingRegion"),
//   				},
//   			},
//   			ConfirmationUrl: jsii.String("confirmationUrl"),
//   			Headers: []interface{}{
//   				&HttpActionHeaderProperty{
//   					Key: jsii.String("key"),
//   					Value: jsii.String("value"),
//   				},
//   			},
//   		},
//   		IotAnalytics: &IotAnalyticsActionProperty{
//   			ChannelName: jsii.String("channelName"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			BatchMode: jsii.Boolean(false),
//   		},
//   		IotEvents: &IotEventsActionProperty{
//   			InputName: jsii.String("inputName"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			BatchMode: jsii.Boolean(false),
//   			MessageId: jsii.String("messageId"),
//   		},
//   		IotSiteWise: &IotSiteWiseActionProperty{
//   			PutAssetPropertyValueEntries: []interface{}{
//   				&PutAssetPropertyValueEntryProperty{
//   					PropertyValues: []interface{}{
//   						&AssetPropertyValueProperty{
//   							Timestamp: &AssetPropertyTimestampProperty{
//   								TimeInSeconds: jsii.String("timeInSeconds"),
//
//   								// the properties below are optional
//   								OffsetInNanos: jsii.String("offsetInNanos"),
//   							},
//   							Value: &AssetPropertyVariantProperty{
//   								BooleanValue: jsii.String("booleanValue"),
//   								DoubleValue: jsii.String("doubleValue"),
//   								IntegerValue: jsii.String("integerValue"),
//   								StringValue: jsii.String("stringValue"),
//   							},
//
//   							// the properties below are optional
//   							Quality: jsii.String("quality"),
//   						},
//   					},
//
//   					// the properties below are optional
//   					AssetId: jsii.String("assetId"),
//   					EntryId: jsii.String("entryId"),
//   					PropertyAlias: jsii.String("propertyAlias"),
//   					PropertyId: jsii.String("propertyId"),
//   				},
//   			},
//   			RoleArn: jsii.String("roleArn"),
//   		},
//   		Kafka: &KafkaActionProperty{
//   			ClientProperties: map[string]*string{
//   				"clientPropertiesKey": jsii.String("clientProperties"),
//   			},
//   			DestinationArn: jsii.String("destinationArn"),
//   			Topic: jsii.String("topic"),
//
//   			// the properties below are optional
//   			Headers: []interface{}{
//   				&KafkaActionHeaderProperty{
//   					Key: jsii.String("key"),
//   					Value: jsii.String("value"),
//   				},
//   			},
//   			Key: jsii.String("key"),
//   			Partition: jsii.String("partition"),
//   		},
//   		Kinesis: &KinesisActionProperty{
//   			RoleArn: jsii.String("roleArn"),
//   			StreamName: jsii.String("streamName"),
//
//   			// the properties below are optional
//   			PartitionKey: jsii.String("partitionKey"),
//   		},
//   		Lambda: &LambdaActionProperty{
//   			FunctionArn: jsii.String("functionArn"),
//   		},
//   		Location: &LocationActionProperty{
//   			DeviceId: jsii.String("deviceId"),
//   			Latitude: jsii.String("latitude"),
//   			Longitude: jsii.String("longitude"),
//   			RoleArn: jsii.String("roleArn"),
//   			TrackerName: jsii.String("trackerName"),
//
//   			// the properties below are optional
//   			Timestamp: &TimestampProperty{
//   				Value: jsii.String("value"),
//
//   				// the properties below are optional
//   				Unit: jsii.String("unit"),
//   			},
//   		},
//   		OpenSearch: &OpenSearchActionProperty{
//   			Endpoint: jsii.String("endpoint"),
//   			Id: jsii.String("id"),
//   			Index: jsii.String("index"),
//   			RoleArn: jsii.String("roleArn"),
//   			Type: jsii.String("type"),
//   		},
//   		Republish: &RepublishActionProperty{
//   			RoleArn: jsii.String("roleArn"),
//   			Topic: jsii.String("topic"),
//
//   			// the properties below are optional
//   			Headers: &RepublishActionHeadersProperty{
//   				ContentType: jsii.String("contentType"),
//   				CorrelationData: jsii.String("correlationData"),
//   				MessageExpiry: jsii.String("messageExpiry"),
//   				PayloadFormatIndicator: jsii.String("payloadFormatIndicator"),
//   				ResponseTopic: jsii.String("responseTopic"),
//   				UserProperties: []interface{}{
//   					&UserPropertyProperty{
//   						Key: jsii.String("key"),
//   						Value: jsii.String("value"),
//   					},
//   				},
//   			},
//   			Qos: jsii.Number(123),
//   		},
//   		S3: &S3ActionProperty{
//   			BucketName: jsii.String("bucketName"),
//   			Key: jsii.String("key"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			CannedAcl: jsii.String("cannedAcl"),
//   		},
//   		Sns: &SnsActionProperty{
//   			RoleArn: jsii.String("roleArn"),
//   			TargetArn: jsii.String("targetArn"),
//
//   			// the properties below are optional
//   			MessageFormat: jsii.String("messageFormat"),
//   		},
//   		Sqs: &SqsActionProperty{
//   			QueueUrl: jsii.String("queueUrl"),
//   			RoleArn: jsii.String("roleArn"),
//
//   			// the properties below are optional
//   			UseBase64: jsii.Boolean(false),
//   		},
//   		StepFunctions: &StepFunctionsActionProperty{
//   			RoleArn: jsii.String("roleArn"),
//   			StateMachineName: jsii.String("stateMachineName"),
//
//   			// the properties below are optional
//   			ExecutionNamePrefix: jsii.String("executionNamePrefix"),
//   		},
//   		Timestream: &TimestreamActionProperty{
//   			DatabaseName: jsii.String("databaseName"),
//   			Dimensions: []interface{}{
//   				&TimestreamDimensionProperty{
//   					Name: jsii.String("name"),
//   					Value: jsii.String("value"),
//   				},
//   			},
//   			RoleArn: jsii.String("roleArn"),
//   			TableName: jsii.String("tableName"),
//
//   			// the properties below are optional
//   			Timestamp: &TimestreamTimestampProperty{
//   				Unit: jsii.String("unit"),
//   				Value: jsii.String("value"),
//   			},
//   		},
//   	},
//   	RuleDisabled: jsii.Boolean(false),
//   }
//
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html
//
type CfnTopicRule_TopicRulePayloadProperty struct {
	// The actions associated with the rule.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-actions
	//
	Actions interface{} `field:"required" json:"actions" yaml:"actions"`
	// The SQL statement used to query the topic.
	//
	// For more information, see [AWS IoT SQL Reference](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-reference.html) in the *AWS IoT Developer Guide* .
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-sql
	//
	Sql *string `field:"required" json:"sql" yaml:"sql"`
	// The version of the SQL rules engine to use when evaluating the rule.
	//
	// The default value is 2015-10-08.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-awsiotsqlversion
	//
	AwsIotSqlVersion *string `field:"optional" json:"awsIotSqlVersion" yaml:"awsIotSqlVersion"`
	// The description of the rule.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-description
	//
	Description *string `field:"optional" json:"description" yaml:"description"`
	// The action to take when an error occurs.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-erroraction
	//
	ErrorAction interface{} `field:"optional" json:"errorAction" yaml:"errorAction"`
	// Specifies whether the rule is disabled.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-ruledisabled
	//
	RuleDisabled interface{} `field:"optional" json:"ruleDisabled" yaml:"ruleDisabled"`
}

