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

import com.pulumi.aws.codedeploy.inputs.DeploymentGroupLoadBalancerInfoElbInfoArgs;
import com.pulumi.aws.codedeploy.inputs.DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs;
import com.pulumi.aws.codedeploy.inputs.DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs;
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 DeploymentGroupLoadBalancerInfoArgs extends com.pulumi.resources.ResourceArgs {

    public static final DeploymentGroupLoadBalancerInfoArgs Empty = new DeploymentGroupLoadBalancerInfoArgs();

    /**
     * The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
     * 
     */
    @Import(name="elbInfos")
    private @Nullable Output<List<DeploymentGroupLoadBalancerInfoElbInfoArgs>> elbInfos;

    /**
     * @return The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
     * 
     */
    public Optional<Output<List<DeploymentGroupLoadBalancerInfoElbInfoArgs>>> elbInfos() {
        return Optional.ofNullable(this.elbInfos);
    }

    /**
     * The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
     * 
     */
    @Import(name="targetGroupInfos")
    private @Nullable Output<List<DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs>> targetGroupInfos;

    /**
     * @return The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
     * 
     */
    public Optional<Output<List<DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs>>> targetGroupInfos() {
        return Optional.ofNullable(this.targetGroupInfos);
    }

    /**
     * The (Application/Network Load Balancer) target group pair to use in a deployment. Conflicts with `elb_info` and `target_group_info`.
     * 
     */
    @Import(name="targetGroupPairInfo")
    private @Nullable Output<DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs> targetGroupPairInfo;

    /**
     * @return The (Application/Network Load Balancer) target group pair to use in a deployment. Conflicts with `elb_info` and `target_group_info`.
     * 
     */
    public Optional<Output<DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs>> targetGroupPairInfo() {
        return Optional.ofNullable(this.targetGroupPairInfo);
    }

    private DeploymentGroupLoadBalancerInfoArgs() {}

    private DeploymentGroupLoadBalancerInfoArgs(DeploymentGroupLoadBalancerInfoArgs $) {
        this.elbInfos = $.elbInfos;
        this.targetGroupInfos = $.targetGroupInfos;
        this.targetGroupPairInfo = $.targetGroupPairInfo;
    }

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

    public static final class Builder {
        private DeploymentGroupLoadBalancerInfoArgs $;

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

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

        /**
         * @param elbInfos The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
         * 
         * @return builder
         * 
         */
        public Builder elbInfos(@Nullable Output<List<DeploymentGroupLoadBalancerInfoElbInfoArgs>> elbInfos) {
            $.elbInfos = elbInfos;
            return this;
        }

        /**
         * @param elbInfos The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
         * 
         * @return builder
         * 
         */
        public Builder elbInfos(List<DeploymentGroupLoadBalancerInfoElbInfoArgs> elbInfos) {
            return elbInfos(Output.of(elbInfos));
        }

        /**
         * @param elbInfos The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
         * 
         * @return builder
         * 
         */
        public Builder elbInfos(DeploymentGroupLoadBalancerInfoElbInfoArgs... elbInfos) {
            return elbInfos(List.of(elbInfos));
        }

        /**
         * @param targetGroupInfos The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
         * 
         * @return builder
         * 
         */
        public Builder targetGroupInfos(@Nullable Output<List<DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs>> targetGroupInfos) {
            $.targetGroupInfos = targetGroupInfos;
            return this;
        }

        /**
         * @param targetGroupInfos The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
         * 
         * @return builder
         * 
         */
        public Builder targetGroupInfos(List<DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs> targetGroupInfos) {
            return targetGroupInfos(Output.of(targetGroupInfos));
        }

        /**
         * @param targetGroupInfos The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
         * 
         * @return builder
         * 
         */
        public Builder targetGroupInfos(DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs... targetGroupInfos) {
            return targetGroupInfos(List.of(targetGroupInfos));
        }

        /**
         * @param targetGroupPairInfo The (Application/Network Load Balancer) target group pair to use in a deployment. Conflicts with `elb_info` and `target_group_info`.
         * 
         * @return builder
         * 
         */
        public Builder targetGroupPairInfo(@Nullable Output<DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs> targetGroupPairInfo) {
            $.targetGroupPairInfo = targetGroupPairInfo;
            return this;
        }

        /**
         * @param targetGroupPairInfo The (Application/Network Load Balancer) target group pair to use in a deployment. Conflicts with `elb_info` and `target_group_info`.
         * 
         * @return builder
         * 
         */
        public Builder targetGroupPairInfo(DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs targetGroupPairInfo) {
            return targetGroupPairInfo(Output.of(targetGroupPairInfo));
        }

        public DeploymentGroupLoadBalancerInfoArgs build() {
            return $;
        }
    }

}
