// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.chimesdkmediapipelines.outputs;

import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementAmazonTranscribeCallAnalyticsProcessorConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementAmazonTranscribeProcessorConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementKinesisDataStreamSinkConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementLambdaFunctionSinkConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementS3RecordingSinkConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementSnsTopicSinkConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementSqsQueueSinkConfiguration;
import com.pulumi.aws.chimesdkmediapipelines.outputs.MediaInsightsPipelineConfigurationElementVoiceAnalyticsProcessorConfiguration;
import com.pulumi.core.annotations.CustomType;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class MediaInsightsPipelineConfigurationElement {
    /**
     * @return Configuration for Amazon Transcribe Call Analytics processor.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementAmazonTranscribeCallAnalyticsProcessorConfiguration amazonTranscribeCallAnalyticsProcessorConfiguration;
    /**
     * @return Configuration for Amazon Transcribe processor.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementAmazonTranscribeProcessorConfiguration amazonTranscribeProcessorConfiguration;
    /**
     * @return Configuration for Kinesis Data Stream sink.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementKinesisDataStreamSinkConfiguration kinesisDataStreamSinkConfiguration;
    /**
     * @return Configuration for Lambda Function sink.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementLambdaFunctionSinkConfiguration lambdaFunctionSinkConfiguration;
    /**
     * @return Configuration for S3 recording sink.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementS3RecordingSinkConfiguration s3RecordingSinkConfiguration;
    /**
     * @return Configuration for SNS Topic sink.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementSnsTopicSinkConfiguration snsTopicSinkConfiguration;
    /**
     * @return Configuration for SQS Queue sink.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementSqsQueueSinkConfiguration sqsQueueSinkConfiguration;
    /**
     * @return Element type.
     * 
     */
    private String type;
    /**
     * @return Configuration for Voice analytics processor.
     * 
     */
    private @Nullable MediaInsightsPipelineConfigurationElementVoiceAnalyticsProcessorConfiguration voiceAnalyticsProcessorConfiguration;

    private MediaInsightsPipelineConfigurationElement() {}
    /**
     * @return Configuration for Amazon Transcribe Call Analytics processor.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementAmazonTranscribeCallAnalyticsProcessorConfiguration> amazonTranscribeCallAnalyticsProcessorConfiguration() {
        return Optional.ofNullable(this.amazonTranscribeCallAnalyticsProcessorConfiguration);
    }
    /**
     * @return Configuration for Amazon Transcribe processor.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementAmazonTranscribeProcessorConfiguration> amazonTranscribeProcessorConfiguration() {
        return Optional.ofNullable(this.amazonTranscribeProcessorConfiguration);
    }
    /**
     * @return Configuration for Kinesis Data Stream sink.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementKinesisDataStreamSinkConfiguration> kinesisDataStreamSinkConfiguration() {
        return Optional.ofNullable(this.kinesisDataStreamSinkConfiguration);
    }
    /**
     * @return Configuration for Lambda Function sink.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementLambdaFunctionSinkConfiguration> lambdaFunctionSinkConfiguration() {
        return Optional.ofNullable(this.lambdaFunctionSinkConfiguration);
    }
    /**
     * @return Configuration for S3 recording sink.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementS3RecordingSinkConfiguration> s3RecordingSinkConfiguration() {
        return Optional.ofNullable(this.s3RecordingSinkConfiguration);
    }
    /**
     * @return Configuration for SNS Topic sink.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementSnsTopicSinkConfiguration> snsTopicSinkConfiguration() {
        return Optional.ofNullable(this.snsTopicSinkConfiguration);
    }
    /**
     * @return Configuration for SQS Queue sink.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementSqsQueueSinkConfiguration> sqsQueueSinkConfiguration() {
        return Optional.ofNullable(this.sqsQueueSinkConfiguration);
    }
    /**
     * @return Element type.
     * 
     */
    public String type() {
        return this.type;
    }
    /**
     * @return Configuration for Voice analytics processor.
     * 
     */
    public Optional<MediaInsightsPipelineConfigurationElementVoiceAnalyticsProcessorConfiguration> voiceAnalyticsProcessorConfiguration() {
        return Optional.ofNullable(this.voiceAnalyticsProcessorConfiguration);
    }

    public static Builder builder() {
        return new Builder();
    }

    public static Builder builder(MediaInsightsPipelineConfigurationElement defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable MediaInsightsPipelineConfigurationElementAmazonTranscribeCallAnalyticsProcessorConfiguration amazonTranscribeCallAnalyticsProcessorConfiguration;
        private @Nullable MediaInsightsPipelineConfigurationElementAmazonTranscribeProcessorConfiguration amazonTranscribeProcessorConfiguration;
        private @Nullable MediaInsightsPipelineConfigurationElementKinesisDataStreamSinkConfiguration kinesisDataStreamSinkConfiguration;
        private @Nullable MediaInsightsPipelineConfigurationElementLambdaFunctionSinkConfiguration lambdaFunctionSinkConfiguration;
        private @Nullable MediaInsightsPipelineConfigurationElementS3RecordingSinkConfiguration s3RecordingSinkConfiguration;
        private @Nullable MediaInsightsPipelineConfigurationElementSnsTopicSinkConfiguration snsTopicSinkConfiguration;
        private @Nullable MediaInsightsPipelineConfigurationElementSqsQueueSinkConfiguration sqsQueueSinkConfiguration;
        private String type;
        private @Nullable MediaInsightsPipelineConfigurationElementVoiceAnalyticsProcessorConfiguration voiceAnalyticsProcessorConfiguration;
        public Builder() {}
        public Builder(MediaInsightsPipelineConfigurationElement defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.amazonTranscribeCallAnalyticsProcessorConfiguration = defaults.amazonTranscribeCallAnalyticsProcessorConfiguration;
    	      this.amazonTranscribeProcessorConfiguration = defaults.amazonTranscribeProcessorConfiguration;
    	      this.kinesisDataStreamSinkConfiguration = defaults.kinesisDataStreamSinkConfiguration;
    	      this.lambdaFunctionSinkConfiguration = defaults.lambdaFunctionSinkConfiguration;
    	      this.s3RecordingSinkConfiguration = defaults.s3RecordingSinkConfiguration;
    	      this.snsTopicSinkConfiguration = defaults.snsTopicSinkConfiguration;
    	      this.sqsQueueSinkConfiguration = defaults.sqsQueueSinkConfiguration;
    	      this.type = defaults.type;
    	      this.voiceAnalyticsProcessorConfiguration = defaults.voiceAnalyticsProcessorConfiguration;
        }

        @CustomType.Setter
        public Builder amazonTranscribeCallAnalyticsProcessorConfiguration(@Nullable MediaInsightsPipelineConfigurationElementAmazonTranscribeCallAnalyticsProcessorConfiguration amazonTranscribeCallAnalyticsProcessorConfiguration) {
            this.amazonTranscribeCallAnalyticsProcessorConfiguration = amazonTranscribeCallAnalyticsProcessorConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder amazonTranscribeProcessorConfiguration(@Nullable MediaInsightsPipelineConfigurationElementAmazonTranscribeProcessorConfiguration amazonTranscribeProcessorConfiguration) {
            this.amazonTranscribeProcessorConfiguration = amazonTranscribeProcessorConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder kinesisDataStreamSinkConfiguration(@Nullable MediaInsightsPipelineConfigurationElementKinesisDataStreamSinkConfiguration kinesisDataStreamSinkConfiguration) {
            this.kinesisDataStreamSinkConfiguration = kinesisDataStreamSinkConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder lambdaFunctionSinkConfiguration(@Nullable MediaInsightsPipelineConfigurationElementLambdaFunctionSinkConfiguration lambdaFunctionSinkConfiguration) {
            this.lambdaFunctionSinkConfiguration = lambdaFunctionSinkConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder s3RecordingSinkConfiguration(@Nullable MediaInsightsPipelineConfigurationElementS3RecordingSinkConfiguration s3RecordingSinkConfiguration) {
            this.s3RecordingSinkConfiguration = s3RecordingSinkConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder snsTopicSinkConfiguration(@Nullable MediaInsightsPipelineConfigurationElementSnsTopicSinkConfiguration snsTopicSinkConfiguration) {
            this.snsTopicSinkConfiguration = snsTopicSinkConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder sqsQueueSinkConfiguration(@Nullable MediaInsightsPipelineConfigurationElementSqsQueueSinkConfiguration sqsQueueSinkConfiguration) {
            this.sqsQueueSinkConfiguration = sqsQueueSinkConfiguration;
            return this;
        }
        @CustomType.Setter
        public Builder type(String type) {
            this.type = Objects.requireNonNull(type);
            return this;
        }
        @CustomType.Setter
        public Builder voiceAnalyticsProcessorConfiguration(@Nullable MediaInsightsPipelineConfigurationElementVoiceAnalyticsProcessorConfiguration voiceAnalyticsProcessorConfiguration) {
            this.voiceAnalyticsProcessorConfiguration = voiceAnalyticsProcessorConfiguration;
            return this;
        }
        public MediaInsightsPipelineConfigurationElement build() {
            final var o = new MediaInsightsPipelineConfigurationElement();
            o.amazonTranscribeCallAnalyticsProcessorConfiguration = amazonTranscribeCallAnalyticsProcessorConfiguration;
            o.amazonTranscribeProcessorConfiguration = amazonTranscribeProcessorConfiguration;
            o.kinesisDataStreamSinkConfiguration = kinesisDataStreamSinkConfiguration;
            o.lambdaFunctionSinkConfiguration = lambdaFunctionSinkConfiguration;
            o.s3RecordingSinkConfiguration = s3RecordingSinkConfiguration;
            o.snsTopicSinkConfiguration = snsTopicSinkConfiguration;
            o.sqsQueueSinkConfiguration = sqsQueueSinkConfiguration;
            o.type = type;
            o.voiceAnalyticsProcessorConfiguration = voiceAnalyticsProcessorConfiguration;
            return o;
        }
    }
}
