// *** 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.medialive.inputs;

import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsArchiveGroupSettingArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsFrameCaptureGroupSettingsArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsHlsGroupSettingsArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsMediaPackageGroupSettingsArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsMsSmoothGroupSettingsArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsMultiplexGroupSettingsArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsRtmpGroupSettingsArgs;
import com.pulumi.aws.medialive.inputs.ChannelEncoderSettingsOutputGroupOutputGroupSettingsUdpGroupSettingsArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs extends com.pulumi.resources.ResourceArgs {

    public static final ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs Empty = new ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs();

    /**
     * Archive group settings. See Archive Group Settings for more details.
     * 
     */
    @Import(name="archiveGroupSettings")
    private @Nullable Output<List<ChannelEncoderSettingsOutputGroupOutputGroupSettingsArchiveGroupSettingArgs>> archiveGroupSettings;

    /**
     * @return Archive group settings. See Archive Group Settings for more details.
     * 
     */
    public Optional<Output<List<ChannelEncoderSettingsOutputGroupOutputGroupSettingsArchiveGroupSettingArgs>>> archiveGroupSettings() {
        return Optional.ofNullable(this.archiveGroupSettings);
    }

    @Import(name="frameCaptureGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsFrameCaptureGroupSettingsArgs> frameCaptureGroupSettings;

    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsFrameCaptureGroupSettingsArgs>> frameCaptureGroupSettings() {
        return Optional.ofNullable(this.frameCaptureGroupSettings);
    }

    @Import(name="hlsGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsHlsGroupSettingsArgs> hlsGroupSettings;

    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsHlsGroupSettingsArgs>> hlsGroupSettings() {
        return Optional.ofNullable(this.hlsGroupSettings);
    }

    /**
     * Media package group settings. See Media Package Group Settings for more details.
     * 
     */
    @Import(name="mediaPackageGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMediaPackageGroupSettingsArgs> mediaPackageGroupSettings;

    /**
     * @return Media package group settings. See Media Package Group Settings for more details.
     * 
     */
    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMediaPackageGroupSettingsArgs>> mediaPackageGroupSettings() {
        return Optional.ofNullable(this.mediaPackageGroupSettings);
    }

    @Import(name="msSmoothGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMsSmoothGroupSettingsArgs> msSmoothGroupSettings;

    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMsSmoothGroupSettingsArgs>> msSmoothGroupSettings() {
        return Optional.ofNullable(this.msSmoothGroupSettings);
    }

    @Import(name="multiplexGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMultiplexGroupSettingsArgs> multiplexGroupSettings;

    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMultiplexGroupSettingsArgs>> multiplexGroupSettings() {
        return Optional.ofNullable(this.multiplexGroupSettings);
    }

    /**
     * RTMP group settings. See RTMP Group Settings for more details.
     * 
     */
    @Import(name="rtmpGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsRtmpGroupSettingsArgs> rtmpGroupSettings;

    /**
     * @return RTMP group settings. See RTMP Group Settings for more details.
     * 
     */
    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsRtmpGroupSettingsArgs>> rtmpGroupSettings() {
        return Optional.ofNullable(this.rtmpGroupSettings);
    }

    @Import(name="udpGroupSettings")
    private @Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsUdpGroupSettingsArgs> udpGroupSettings;

    public Optional<Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsUdpGroupSettingsArgs>> udpGroupSettings() {
        return Optional.ofNullable(this.udpGroupSettings);
    }

    private ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs() {}

    private ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs(ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs $) {
        this.archiveGroupSettings = $.archiveGroupSettings;
        this.frameCaptureGroupSettings = $.frameCaptureGroupSettings;
        this.hlsGroupSettings = $.hlsGroupSettings;
        this.mediaPackageGroupSettings = $.mediaPackageGroupSettings;
        this.msSmoothGroupSettings = $.msSmoothGroupSettings;
        this.multiplexGroupSettings = $.multiplexGroupSettings;
        this.rtmpGroupSettings = $.rtmpGroupSettings;
        this.udpGroupSettings = $.udpGroupSettings;
    }

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

    public static final class Builder {
        private ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs $;

        public Builder() {
            $ = new ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs();
        }

        public Builder(ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs defaults) {
            $ = new ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param archiveGroupSettings Archive group settings. See Archive Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder archiveGroupSettings(@Nullable Output<List<ChannelEncoderSettingsOutputGroupOutputGroupSettingsArchiveGroupSettingArgs>> archiveGroupSettings) {
            $.archiveGroupSettings = archiveGroupSettings;
            return this;
        }

        /**
         * @param archiveGroupSettings Archive group settings. See Archive Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder archiveGroupSettings(List<ChannelEncoderSettingsOutputGroupOutputGroupSettingsArchiveGroupSettingArgs> archiveGroupSettings) {
            return archiveGroupSettings(Output.of(archiveGroupSettings));
        }

        /**
         * @param archiveGroupSettings Archive group settings. See Archive Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder archiveGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsArchiveGroupSettingArgs... archiveGroupSettings) {
            return archiveGroupSettings(List.of(archiveGroupSettings));
        }

        public Builder frameCaptureGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsFrameCaptureGroupSettingsArgs> frameCaptureGroupSettings) {
            $.frameCaptureGroupSettings = frameCaptureGroupSettings;
            return this;
        }

        public Builder frameCaptureGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsFrameCaptureGroupSettingsArgs frameCaptureGroupSettings) {
            return frameCaptureGroupSettings(Output.of(frameCaptureGroupSettings));
        }

        public Builder hlsGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsHlsGroupSettingsArgs> hlsGroupSettings) {
            $.hlsGroupSettings = hlsGroupSettings;
            return this;
        }

        public Builder hlsGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsHlsGroupSettingsArgs hlsGroupSettings) {
            return hlsGroupSettings(Output.of(hlsGroupSettings));
        }

        /**
         * @param mediaPackageGroupSettings Media package group settings. See Media Package Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder mediaPackageGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMediaPackageGroupSettingsArgs> mediaPackageGroupSettings) {
            $.mediaPackageGroupSettings = mediaPackageGroupSettings;
            return this;
        }

        /**
         * @param mediaPackageGroupSettings Media package group settings. See Media Package Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder mediaPackageGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsMediaPackageGroupSettingsArgs mediaPackageGroupSettings) {
            return mediaPackageGroupSettings(Output.of(mediaPackageGroupSettings));
        }

        public Builder msSmoothGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMsSmoothGroupSettingsArgs> msSmoothGroupSettings) {
            $.msSmoothGroupSettings = msSmoothGroupSettings;
            return this;
        }

        public Builder msSmoothGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsMsSmoothGroupSettingsArgs msSmoothGroupSettings) {
            return msSmoothGroupSettings(Output.of(msSmoothGroupSettings));
        }

        public Builder multiplexGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsMultiplexGroupSettingsArgs> multiplexGroupSettings) {
            $.multiplexGroupSettings = multiplexGroupSettings;
            return this;
        }

        public Builder multiplexGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsMultiplexGroupSettingsArgs multiplexGroupSettings) {
            return multiplexGroupSettings(Output.of(multiplexGroupSettings));
        }

        /**
         * @param rtmpGroupSettings RTMP group settings. See RTMP Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder rtmpGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsRtmpGroupSettingsArgs> rtmpGroupSettings) {
            $.rtmpGroupSettings = rtmpGroupSettings;
            return this;
        }

        /**
         * @param rtmpGroupSettings RTMP group settings. See RTMP Group Settings for more details.
         * 
         * @return builder
         * 
         */
        public Builder rtmpGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsRtmpGroupSettingsArgs rtmpGroupSettings) {
            return rtmpGroupSettings(Output.of(rtmpGroupSettings));
        }

        public Builder udpGroupSettings(@Nullable Output<ChannelEncoderSettingsOutputGroupOutputGroupSettingsUdpGroupSettingsArgs> udpGroupSettings) {
            $.udpGroupSettings = udpGroupSettings;
            return this;
        }

        public Builder udpGroupSettings(ChannelEncoderSettingsOutputGroupOutputGroupSettingsUdpGroupSettingsArgs udpGroupSettings) {
            return udpGroupSettings(Output.of(udpGroupSettings));
        }

        public ChannelEncoderSettingsOutputGroupOutputGroupSettingsArgs build() {
            return $;
        }
    }

}
