package awscdkiotalpha

import (
	"github.com/aws/aws-cdk-go/awscdk/v2/awsiot"
)

// Properties for an topic rule action.
//
// Example:
//   // The code below shows an example of how to instantiate this type.
//   // The values are placeholders you should change.
//   import iot_alpha "github.com/aws/aws-cdk-go/awscdkiotalpha"
//
//   actionConfig := &ActionConfig{
//   	Configuration: &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"),
//   			},
//   		},
//   	},
//   }
//
// Experimental.
type ActionConfig struct {
	// The configuration for this action.
	// Experimental.
	Configuration *awsiot.CfnTopicRule_ActionProperty `field:"required" json:"configuration" yaml:"configuration"`
}

