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

import com.pulumi.aws.opsworks.inputs.CustomLayerLoadBasedAutoScalingDownscalingArgs;
import com.pulumi.aws.opsworks.inputs.CustomLayerLoadBasedAutoScalingUpscalingArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final CustomLayerLoadBasedAutoScalingArgs Empty = new CustomLayerLoadBasedAutoScalingArgs();

    /**
     * The downscaling settings, as defined below, used for load-based autoscaling
     * 
     */
    @Import(name="downscaling")
    private @Nullable Output<CustomLayerLoadBasedAutoScalingDownscalingArgs> downscaling;

    /**
     * @return The downscaling settings, as defined below, used for load-based autoscaling
     * 
     */
    public Optional<Output<CustomLayerLoadBasedAutoScalingDownscalingArgs>> downscaling() {
        return Optional.ofNullable(this.downscaling);
    }

    /**
     * Whether load-based auto scaling is enabled for the layer.
     * 
     */
    @Import(name="enable")
    private @Nullable Output<Boolean> enable;

    /**
     * @return Whether load-based auto scaling is enabled for the layer.
     * 
     */
    public Optional<Output<Boolean>> enable() {
        return Optional.ofNullable(this.enable);
    }

    /**
     * The upscaling settings, as defined below, used for load-based autoscaling
     * 
     */
    @Import(name="upscaling")
    private @Nullable Output<CustomLayerLoadBasedAutoScalingUpscalingArgs> upscaling;

    /**
     * @return The upscaling settings, as defined below, used for load-based autoscaling
     * 
     */
    public Optional<Output<CustomLayerLoadBasedAutoScalingUpscalingArgs>> upscaling() {
        return Optional.ofNullable(this.upscaling);
    }

    private CustomLayerLoadBasedAutoScalingArgs() {}

    private CustomLayerLoadBasedAutoScalingArgs(CustomLayerLoadBasedAutoScalingArgs $) {
        this.downscaling = $.downscaling;
        this.enable = $.enable;
        this.upscaling = $.upscaling;
    }

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

    public static final class Builder {
        private CustomLayerLoadBasedAutoScalingArgs $;

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

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

        /**
         * @param downscaling The downscaling settings, as defined below, used for load-based autoscaling
         * 
         * @return builder
         * 
         */
        public Builder downscaling(@Nullable Output<CustomLayerLoadBasedAutoScalingDownscalingArgs> downscaling) {
            $.downscaling = downscaling;
            return this;
        }

        /**
         * @param downscaling The downscaling settings, as defined below, used for load-based autoscaling
         * 
         * @return builder
         * 
         */
        public Builder downscaling(CustomLayerLoadBasedAutoScalingDownscalingArgs downscaling) {
            return downscaling(Output.of(downscaling));
        }

        /**
         * @param enable Whether load-based auto scaling is enabled for the layer.
         * 
         * @return builder
         * 
         */
        public Builder enable(@Nullable Output<Boolean> enable) {
            $.enable = enable;
            return this;
        }

        /**
         * @param enable Whether load-based auto scaling is enabled for the layer.
         * 
         * @return builder
         * 
         */
        public Builder enable(Boolean enable) {
            return enable(Output.of(enable));
        }

        /**
         * @param upscaling The upscaling settings, as defined below, used for load-based autoscaling
         * 
         * @return builder
         * 
         */
        public Builder upscaling(@Nullable Output<CustomLayerLoadBasedAutoScalingUpscalingArgs> upscaling) {
            $.upscaling = upscaling;
            return this;
        }

        /**
         * @param upscaling The upscaling settings, as defined below, used for load-based autoscaling
         * 
         * @return builder
         * 
         */
        public Builder upscaling(CustomLayerLoadBasedAutoScalingUpscalingArgs upscaling) {
            return upscaling(Output.of(upscaling));
        }

        public CustomLayerLoadBasedAutoScalingArgs build() {
            return $;
        }
    }

}
