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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final DeploymentState Empty = new DeploymentState();

    /**
     * Creation date of the deployment
     * 
     */
    @Import(name="createdDate")
    private @Nullable Output<String> createdDate;

    /**
     * @return Creation date of the deployment
     * 
     */
    public Optional<Output<String>> createdDate() {
        return Optional.ofNullable(this.createdDate);
    }

    /**
     * Description of the deployment
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return Description of the deployment
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Execution ARN to be used in `lambda_permission`&#39;s `source_arn`
     * when allowing API Gateway to invoke a Lambda function,
     * e.g., `arn:aws:execute-api:eu-west-2:123456789012:z4675bid1j/prod`
     * 
     */
    @Import(name="executionArn")
    private @Nullable Output<String> executionArn;

    /**
     * @return Execution ARN to be used in `lambda_permission`&#39;s `source_arn`
     * when allowing API Gateway to invoke a Lambda function,
     * e.g., `arn:aws:execute-api:eu-west-2:123456789012:z4675bid1j/prod`
     * 
     */
    public Optional<Output<String>> executionArn() {
        return Optional.ofNullable(this.executionArn);
    }

    /**
     * URL to invoke the API pointing to the stage,
     * e.g., `https://z4675bid1j.execute-api.eu-west-2.amazonaws.com/prod`
     * 
     */
    @Import(name="invokeUrl")
    private @Nullable Output<String> invokeUrl;

    /**
     * @return URL to invoke the API pointing to the stage,
     * e.g., `https://z4675bid1j.execute-api.eu-west-2.amazonaws.com/prod`
     * 
     */
    public Optional<Output<String>> invokeUrl() {
        return Optional.ofNullable(this.invokeUrl);
    }

    /**
     * REST API identifier.
     * 
     */
    @Import(name="restApi")
    private @Nullable Output<String> restApi;

    /**
     * @return REST API identifier.
     * 
     */
    public Optional<Output<String>> restApi() {
        return Optional.ofNullable(this.restApi);
    }

    /**
     * Description to set on the stage managed by the `stage_name` argument.
     * 
     */
    @Import(name="stageDescription")
    private @Nullable Output<String> stageDescription;

    /**
     * @return Description to set on the stage managed by the `stage_name` argument.
     * 
     */
    public Optional<Output<String>> stageDescription() {
        return Optional.ofNullable(this.stageDescription);
    }

    /**
     * Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.
     * 
     */
    @Import(name="stageName")
    private @Nullable Output<String> stageName;

    /**
     * @return Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.
     * 
     */
    public Optional<Output<String>> stageName() {
        return Optional.ofNullable(this.stageName);
    }

    /**
     * Map of arbitrary keys and values that, when changed, will trigger a redeployment.
     * 
     */
    @Import(name="triggers")
    private @Nullable Output<Map<String,String>> triggers;

    /**
     * @return Map of arbitrary keys and values that, when changed, will trigger a redeployment.
     * 
     */
    public Optional<Output<Map<String,String>>> triggers() {
        return Optional.ofNullable(this.triggers);
    }

    /**
     * Map to set on the stage managed by the `stage_name` argument.
     * 
     */
    @Import(name="variables")
    private @Nullable Output<Map<String,String>> variables;

    /**
     * @return Map to set on the stage managed by the `stage_name` argument.
     * 
     */
    public Optional<Output<Map<String,String>>> variables() {
        return Optional.ofNullable(this.variables);
    }

    private DeploymentState() {}

    private DeploymentState(DeploymentState $) {
        this.createdDate = $.createdDate;
        this.description = $.description;
        this.executionArn = $.executionArn;
        this.invokeUrl = $.invokeUrl;
        this.restApi = $.restApi;
        this.stageDescription = $.stageDescription;
        this.stageName = $.stageName;
        this.triggers = $.triggers;
        this.variables = $.variables;
    }

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

    public static final class Builder {
        private DeploymentState $;

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

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

        /**
         * @param createdDate Creation date of the deployment
         * 
         * @return builder
         * 
         */
        public Builder createdDate(@Nullable Output<String> createdDate) {
            $.createdDate = createdDate;
            return this;
        }

        /**
         * @param createdDate Creation date of the deployment
         * 
         * @return builder
         * 
         */
        public Builder createdDate(String createdDate) {
            return createdDate(Output.of(createdDate));
        }

        /**
         * @param description Description of the deployment
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description Description of the deployment
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param executionArn Execution ARN to be used in `lambda_permission`&#39;s `source_arn`
         * when allowing API Gateway to invoke a Lambda function,
         * e.g., `arn:aws:execute-api:eu-west-2:123456789012:z4675bid1j/prod`
         * 
         * @return builder
         * 
         */
        public Builder executionArn(@Nullable Output<String> executionArn) {
            $.executionArn = executionArn;
            return this;
        }

        /**
         * @param executionArn Execution ARN to be used in `lambda_permission`&#39;s `source_arn`
         * when allowing API Gateway to invoke a Lambda function,
         * e.g., `arn:aws:execute-api:eu-west-2:123456789012:z4675bid1j/prod`
         * 
         * @return builder
         * 
         */
        public Builder executionArn(String executionArn) {
            return executionArn(Output.of(executionArn));
        }

        /**
         * @param invokeUrl URL to invoke the API pointing to the stage,
         * e.g., `https://z4675bid1j.execute-api.eu-west-2.amazonaws.com/prod`
         * 
         * @return builder
         * 
         */
        public Builder invokeUrl(@Nullable Output<String> invokeUrl) {
            $.invokeUrl = invokeUrl;
            return this;
        }

        /**
         * @param invokeUrl URL to invoke the API pointing to the stage,
         * e.g., `https://z4675bid1j.execute-api.eu-west-2.amazonaws.com/prod`
         * 
         * @return builder
         * 
         */
        public Builder invokeUrl(String invokeUrl) {
            return invokeUrl(Output.of(invokeUrl));
        }

        /**
         * @param restApi REST API identifier.
         * 
         * @return builder
         * 
         */
        public Builder restApi(@Nullable Output<String> restApi) {
            $.restApi = restApi;
            return this;
        }

        /**
         * @param restApi REST API identifier.
         * 
         * @return builder
         * 
         */
        public Builder restApi(String restApi) {
            return restApi(Output.of(restApi));
        }

        /**
         * @param stageDescription Description to set on the stage managed by the `stage_name` argument.
         * 
         * @return builder
         * 
         */
        public Builder stageDescription(@Nullable Output<String> stageDescription) {
            $.stageDescription = stageDescription;
            return this;
        }

        /**
         * @param stageDescription Description to set on the stage managed by the `stage_name` argument.
         * 
         * @return builder
         * 
         */
        public Builder stageDescription(String stageDescription) {
            return stageDescription(Output.of(stageDescription));
        }

        /**
         * @param stageName Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.
         * 
         * @return builder
         * 
         */
        public Builder stageName(@Nullable Output<String> stageName) {
            $.stageName = stageName;
            return this;
        }

        /**
         * @param stageName Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.
         * 
         * @return builder
         * 
         */
        public Builder stageName(String stageName) {
            return stageName(Output.of(stageName));
        }

        /**
         * @param triggers Map of arbitrary keys and values that, when changed, will trigger a redeployment.
         * 
         * @return builder
         * 
         */
        public Builder triggers(@Nullable Output<Map<String,String>> triggers) {
            $.triggers = triggers;
            return this;
        }

        /**
         * @param triggers Map of arbitrary keys and values that, when changed, will trigger a redeployment.
         * 
         * @return builder
         * 
         */
        public Builder triggers(Map<String,String> triggers) {
            return triggers(Output.of(triggers));
        }

        /**
         * @param variables Map to set on the stage managed by the `stage_name` argument.
         * 
         * @return builder
         * 
         */
        public Builder variables(@Nullable Output<Map<String,String>> variables) {
            $.variables = variables;
            return this;
        }

        /**
         * @param variables Map to set on the stage managed by the `stage_name` argument.
         * 
         * @return builder
         * 
         */
        public Builder variables(Map<String,String> variables) {
            return variables(Output.of(variables));
        }

        public DeploymentState build() {
            return $;
        }
    }

}
