// *** 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.azure.appservice.outputs;

import com.pulumi.azure.appservice.outputs.LinuxFunctionAppSiteConfigApplicationStackDocker;
import com.pulumi.core.annotations.CustomType;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class LinuxFunctionAppSiteConfigApplicationStack {
    /**
     * @return One or more `docker` blocks as defined below.
     * 
     */
    private @Nullable List<LinuxFunctionAppSiteConfigApplicationStackDocker> dockers;
    /**
     * @return The version of .NET to use. Possible values include `3.1`, `6.0` and `7.0`.
     * 
     */
    private @Nullable String dotnetVersion;
    /**
     * @return The Version of Java to use. Supported versions include `8`, `11` &amp; `17`.
     * 
     */
    private @Nullable String javaVersion;
    /**
     * @return The version of Node to run. Possible values include `12`, `14`, `16` and `18`.
     * 
     */
    private @Nullable String nodeVersion;
    /**
     * @return The version of PowerShell Core to run. Possible values are `7`, and `7.2`.
     * 
     */
    private @Nullable String powershellCoreVersion;
    /**
     * @return The version of Python to run. Possible values are `3.11`, `3.10`, `3.9`, `3.8` and `3.7`.
     * 
     */
    private @Nullable String pythonVersion;
    /**
     * @return Should the Linux Function App use a custom runtime?
     * 
     */
    private @Nullable Boolean useCustomRuntime;
    /**
     * @return Should the DotNet process use an isolated runtime. Defaults to `false`.
     * 
     */
    private @Nullable Boolean useDotnetIsolatedRuntime;

    private LinuxFunctionAppSiteConfigApplicationStack() {}
    /**
     * @return One or more `docker` blocks as defined below.
     * 
     */
    public List<LinuxFunctionAppSiteConfigApplicationStackDocker> dockers() {
        return this.dockers == null ? List.of() : this.dockers;
    }
    /**
     * @return The version of .NET to use. Possible values include `3.1`, `6.0` and `7.0`.
     * 
     */
    public Optional<String> dotnetVersion() {
        return Optional.ofNullable(this.dotnetVersion);
    }
    /**
     * @return The Version of Java to use. Supported versions include `8`, `11` &amp; `17`.
     * 
     */
    public Optional<String> javaVersion() {
        return Optional.ofNullable(this.javaVersion);
    }
    /**
     * @return The version of Node to run. Possible values include `12`, `14`, `16` and `18`.
     * 
     */
    public Optional<String> nodeVersion() {
        return Optional.ofNullable(this.nodeVersion);
    }
    /**
     * @return The version of PowerShell Core to run. Possible values are `7`, and `7.2`.
     * 
     */
    public Optional<String> powershellCoreVersion() {
        return Optional.ofNullable(this.powershellCoreVersion);
    }
    /**
     * @return The version of Python to run. Possible values are `3.11`, `3.10`, `3.9`, `3.8` and `3.7`.
     * 
     */
    public Optional<String> pythonVersion() {
        return Optional.ofNullable(this.pythonVersion);
    }
    /**
     * @return Should the Linux Function App use a custom runtime?
     * 
     */
    public Optional<Boolean> useCustomRuntime() {
        return Optional.ofNullable(this.useCustomRuntime);
    }
    /**
     * @return Should the DotNet process use an isolated runtime. Defaults to `false`.
     * 
     */
    public Optional<Boolean> useDotnetIsolatedRuntime() {
        return Optional.ofNullable(this.useDotnetIsolatedRuntime);
    }

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

    public static Builder builder(LinuxFunctionAppSiteConfigApplicationStack defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable List<LinuxFunctionAppSiteConfigApplicationStackDocker> dockers;
        private @Nullable String dotnetVersion;
        private @Nullable String javaVersion;
        private @Nullable String nodeVersion;
        private @Nullable String powershellCoreVersion;
        private @Nullable String pythonVersion;
        private @Nullable Boolean useCustomRuntime;
        private @Nullable Boolean useDotnetIsolatedRuntime;
        public Builder() {}
        public Builder(LinuxFunctionAppSiteConfigApplicationStack defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.dockers = defaults.dockers;
    	      this.dotnetVersion = defaults.dotnetVersion;
    	      this.javaVersion = defaults.javaVersion;
    	      this.nodeVersion = defaults.nodeVersion;
    	      this.powershellCoreVersion = defaults.powershellCoreVersion;
    	      this.pythonVersion = defaults.pythonVersion;
    	      this.useCustomRuntime = defaults.useCustomRuntime;
    	      this.useDotnetIsolatedRuntime = defaults.useDotnetIsolatedRuntime;
        }

        @CustomType.Setter
        public Builder dockers(@Nullable List<LinuxFunctionAppSiteConfigApplicationStackDocker> dockers) {
            this.dockers = dockers;
            return this;
        }
        public Builder dockers(LinuxFunctionAppSiteConfigApplicationStackDocker... dockers) {
            return dockers(List.of(dockers));
        }
        @CustomType.Setter
        public Builder dotnetVersion(@Nullable String dotnetVersion) {
            this.dotnetVersion = dotnetVersion;
            return this;
        }
        @CustomType.Setter
        public Builder javaVersion(@Nullable String javaVersion) {
            this.javaVersion = javaVersion;
            return this;
        }
        @CustomType.Setter
        public Builder nodeVersion(@Nullable String nodeVersion) {
            this.nodeVersion = nodeVersion;
            return this;
        }
        @CustomType.Setter
        public Builder powershellCoreVersion(@Nullable String powershellCoreVersion) {
            this.powershellCoreVersion = powershellCoreVersion;
            return this;
        }
        @CustomType.Setter
        public Builder pythonVersion(@Nullable String pythonVersion) {
            this.pythonVersion = pythonVersion;
            return this;
        }
        @CustomType.Setter
        public Builder useCustomRuntime(@Nullable Boolean useCustomRuntime) {
            this.useCustomRuntime = useCustomRuntime;
            return this;
        }
        @CustomType.Setter
        public Builder useDotnetIsolatedRuntime(@Nullable Boolean useDotnetIsolatedRuntime) {
            this.useDotnetIsolatedRuntime = useDotnetIsolatedRuntime;
            return this;
        }
        public LinuxFunctionAppSiteConfigApplicationStack build() {
            final var o = new LinuxFunctionAppSiteConfigApplicationStack();
            o.dockers = dockers;
            o.dotnetVersion = dotnetVersion;
            o.javaVersion = javaVersion;
            o.nodeVersion = nodeVersion;
            o.powershellCoreVersion = powershellCoreVersion;
            o.pythonVersion = pythonVersion;
            o.useCustomRuntime = useCustomRuntime;
            o.useDotnetIsolatedRuntime = useDotnetIsolatedRuntime;
            return o;
        }
    }
}
