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

import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotAuthSettingsArgs;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotAuthSettingsV2Args;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotBackupArgs;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotConnectionStringArgs;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotIdentityArgs;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotSiteConfigArgs;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotSiteCredentialArgs;
import com.pulumi.azure.appservice.inputs.WindowsFunctionAppSlotStorageAccountArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final WindowsFunctionAppSlotState Empty = new WindowsFunctionAppSlotState();

    /**
     * A map of key-value pairs for [App Settings](https://docs.microsoft.com/azure/azure-functions/functions-app-settings) and custom values.
     * 
     */
    @Import(name="appSettings")
    private @Nullable Output<Map<String,String>> appSettings;

    /**
     * @return A map of key-value pairs for [App Settings](https://docs.microsoft.com/azure/azure-functions/functions-app-settings) and custom values.
     * 
     */
    public Optional<Output<Map<String,String>>> appSettings() {
        return Optional.ofNullable(this.appSettings);
    }

    /**
     * an `auth_settings` block as detailed below.
     * 
     */
    @Import(name="authSettings")
    private @Nullable Output<WindowsFunctionAppSlotAuthSettingsArgs> authSettings;

    /**
     * @return an `auth_settings` block as detailed below.
     * 
     */
    public Optional<Output<WindowsFunctionAppSlotAuthSettingsArgs>> authSettings() {
        return Optional.ofNullable(this.authSettings);
    }

    /**
     * an `auth_settings_v2` block as detailed below.
     * 
     */
    @Import(name="authSettingsV2")
    private @Nullable Output<WindowsFunctionAppSlotAuthSettingsV2Args> authSettingsV2;

    /**
     * @return an `auth_settings_v2` block as detailed below.
     * 
     */
    public Optional<Output<WindowsFunctionAppSlotAuthSettingsV2Args>> authSettingsV2() {
        return Optional.ofNullable(this.authSettingsV2);
    }

    /**
     * a `backup` block as detailed below.
     * 
     */
    @Import(name="backup")
    private @Nullable Output<WindowsFunctionAppSlotBackupArgs> backup;

    /**
     * @return a `backup` block as detailed below.
     * 
     */
    public Optional<Output<WindowsFunctionAppSlotBackupArgs>> backup() {
        return Optional.ofNullable(this.backup);
    }

    /**
     * Should built-in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting. Defaults to `true`.
     * 
     */
    @Import(name="builtinLoggingEnabled")
    private @Nullable Output<Boolean> builtinLoggingEnabled;

    /**
     * @return Should built-in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> builtinLoggingEnabled() {
        return Optional.ofNullable(this.builtinLoggingEnabled);
    }

    /**
     * Should the Function App Slot use Client Certificates.
     * 
     */
    @Import(name="clientCertificateEnabled")
    private @Nullable Output<Boolean> clientCertificateEnabled;

    /**
     * @return Should the Function App Slot use Client Certificates.
     * 
     */
    public Optional<Output<Boolean>> clientCertificateEnabled() {
        return Optional.ofNullable(this.clientCertificateEnabled);
    }

    /**
     * Paths to exclude when using client certificates, separated by ;
     * 
     */
    @Import(name="clientCertificateExclusionPaths")
    private @Nullable Output<String> clientCertificateExclusionPaths;

    /**
     * @return Paths to exclude when using client certificates, separated by ;
     * 
     */
    public Optional<Output<String>> clientCertificateExclusionPaths() {
        return Optional.ofNullable(this.clientCertificateExclusionPaths);
    }

    /**
     * The mode of the Function App Slot&#39;s client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`.
     * 
     */
    @Import(name="clientCertificateMode")
    private @Nullable Output<String> clientCertificateMode;

    /**
     * @return The mode of the Function App Slot&#39;s client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`.
     * 
     */
    public Optional<Output<String>> clientCertificateMode() {
        return Optional.ofNullable(this.clientCertificateMode);
    }

    /**
     * a `connection_string` block as detailed below.
     * 
     */
    @Import(name="connectionStrings")
    private @Nullable Output<List<WindowsFunctionAppSlotConnectionStringArgs>> connectionStrings;

    /**
     * @return a `connection_string` block as detailed below.
     * 
     */
    public Optional<Output<List<WindowsFunctionAppSlotConnectionStringArgs>>> connectionStrings() {
        return Optional.ofNullable(this.connectionStrings);
    }

    /**
     * Force disable the content share settings.
     * 
     */
    @Import(name="contentShareForceDisabled")
    private @Nullable Output<Boolean> contentShareForceDisabled;

    /**
     * @return Force disable the content share settings.
     * 
     */
    public Optional<Output<Boolean>> contentShareForceDisabled() {
        return Optional.ofNullable(this.contentShareForceDisabled);
    }

    /**
     * The identifier used by App Service to perform domain ownership verification via DNS TXT record.
     * 
     */
    @Import(name="customDomainVerificationId")
    private @Nullable Output<String> customDomainVerificationId;

    /**
     * @return The identifier used by App Service to perform domain ownership verification via DNS TXT record.
     * 
     */
    public Optional<Output<String>> customDomainVerificationId() {
        return Optional.ofNullable(this.customDomainVerificationId);
    }

    /**
     * The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans. Defaults to `0`.
     * 
     */
    @Import(name="dailyMemoryTimeQuota")
    private @Nullable Output<Integer> dailyMemoryTimeQuota;

    /**
     * @return The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans. Defaults to `0`.
     * 
     */
    public Optional<Output<Integer>> dailyMemoryTimeQuota() {
        return Optional.ofNullable(this.dailyMemoryTimeQuota);
    }

    /**
     * The default hostname of the Windows Function App Slot.
     * 
     */
    @Import(name="defaultHostname")
    private @Nullable Output<String> defaultHostname;

    /**
     * @return The default hostname of the Windows Function App Slot.
     * 
     */
    public Optional<Output<String>> defaultHostname() {
        return Optional.ofNullable(this.defaultHostname);
    }

    /**
     * Is the Windows Function App Slot enabled. Defaults to `true`.
     * 
     */
    @Import(name="enabled")
    private @Nullable Output<Boolean> enabled;

    /**
     * @return Is the Windows Function App Slot enabled. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> enabled() {
        return Optional.ofNullable(this.enabled);
    }

    /**
     * The name of the Windows Function App this Slot is a member of. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="functionAppId")
    private @Nullable Output<String> functionAppId;

    /**
     * @return The name of the Windows Function App this Slot is a member of. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> functionAppId() {
        return Optional.ofNullable(this.functionAppId);
    }

    /**
     * The runtime version associated with the Function App Slot. Defaults to `~4`.
     * 
     */
    @Import(name="functionsExtensionVersion")
    private @Nullable Output<String> functionsExtensionVersion;

    /**
     * @return The runtime version associated with the Function App Slot. Defaults to `~4`.
     * 
     */
    public Optional<Output<String>> functionsExtensionVersion() {
        return Optional.ofNullable(this.functionsExtensionVersion);
    }

    /**
     * The ID of the App Service Environment used by Function App Slot.
     * 
     */
    @Import(name="hostingEnvironmentId")
    private @Nullable Output<String> hostingEnvironmentId;

    /**
     * @return The ID of the App Service Environment used by Function App Slot.
     * 
     */
    public Optional<Output<String>> hostingEnvironmentId() {
        return Optional.ofNullable(this.hostingEnvironmentId);
    }

    /**
     * Can the Function App Slot only be accessed via HTTPS?
     * 
     */
    @Import(name="httpsOnly")
    private @Nullable Output<Boolean> httpsOnly;

    /**
     * @return Can the Function App Slot only be accessed via HTTPS?
     * 
     */
    public Optional<Output<Boolean>> httpsOnly() {
        return Optional.ofNullable(this.httpsOnly);
    }

    /**
     * an `identity` block as detailed below.
     * 
     */
    @Import(name="identity")
    private @Nullable Output<WindowsFunctionAppSlotIdentityArgs> identity;

    /**
     * @return an `identity` block as detailed below.
     * 
     */
    public Optional<Output<WindowsFunctionAppSlotIdentityArgs>> identity() {
        return Optional.ofNullable(this.identity);
    }

    /**
     * The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
     * 
     */
    @Import(name="keyVaultReferenceIdentityId")
    private @Nullable Output<String> keyVaultReferenceIdentityId;

    /**
     * @return The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
     * 
     */
    public Optional<Output<String>> keyVaultReferenceIdentityId() {
        return Optional.ofNullable(this.keyVaultReferenceIdentityId);
    }

    /**
     * The Kind value for this Windows Function App Slot.
     * 
     */
    @Import(name="kind")
    private @Nullable Output<String> kind;

    /**
     * @return The Kind value for this Windows Function App Slot.
     * 
     */
    public Optional<Output<String>> kind() {
        return Optional.ofNullable(this.kind);
    }

    /**
     * Specifies the name of the Windows Function App Slot. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Specifies the name of the Windows Function App Slot. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * A list of outbound IP addresses. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
     * 
     */
    @Import(name="outboundIpAddressLists")
    private @Nullable Output<List<String>> outboundIpAddressLists;

    /**
     * @return A list of outbound IP addresses. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
     * 
     */
    public Optional<Output<List<String>>> outboundIpAddressLists() {
        return Optional.ofNullable(this.outboundIpAddressLists);
    }

    /**
     * A comma separated list of outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12`.
     * 
     */
    @Import(name="outboundIpAddresses")
    private @Nullable Output<String> outboundIpAddresses;

    /**
     * @return A comma separated list of outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12`.
     * 
     */
    public Optional<Output<String>> outboundIpAddresses() {
        return Optional.ofNullable(this.outboundIpAddresses);
    }

    /**
     * A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
     * 
     */
    @Import(name="possibleOutboundIpAddressLists")
    private @Nullable Output<List<String>> possibleOutboundIpAddressLists;

    /**
     * @return A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
     * 
     */
    public Optional<Output<List<String>>> possibleOutboundIpAddressLists() {
        return Optional.ofNullable(this.possibleOutboundIpAddressLists);
    }

    /**
     * A comma separated list of possible outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12,52.143.43.17`. This is a superset of `outbound_ip_addresses`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;,&#34;52.143.43.17&#34;]`.
     * 
     */
    @Import(name="possibleOutboundIpAddresses")
    private @Nullable Output<String> possibleOutboundIpAddresses;

    /**
     * @return A comma separated list of possible outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12,52.143.43.17`. This is a superset of `outbound_ip_addresses`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;,&#34;52.143.43.17&#34;]`.
     * 
     */
    public Optional<Output<String>> possibleOutboundIpAddresses() {
        return Optional.ofNullable(this.possibleOutboundIpAddresses);
    }

    /**
     * Should public network access be enabled for the Function App. Defaults to `true`.
     * 
     */
    @Import(name="publicNetworkAccessEnabled")
    private @Nullable Output<Boolean> publicNetworkAccessEnabled;

    /**
     * @return Should public network access be enabled for the Function App. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> publicNetworkAccessEnabled() {
        return Optional.ofNullable(this.publicNetworkAccessEnabled);
    }

    /**
     * The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Function App will be used.
     * 
     */
    @Import(name="servicePlanId")
    private @Nullable Output<String> servicePlanId;

    /**
     * @return The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Function App will be used.
     * 
     */
    public Optional<Output<String>> servicePlanId() {
        return Optional.ofNullable(this.servicePlanId);
    }

    /**
     * a `site_config` block as detailed below.
     * 
     */
    @Import(name="siteConfig")
    private @Nullable Output<WindowsFunctionAppSlotSiteConfigArgs> siteConfig;

    /**
     * @return a `site_config` block as detailed below.
     * 
     */
    public Optional<Output<WindowsFunctionAppSlotSiteConfigArgs>> siteConfig() {
        return Optional.ofNullable(this.siteConfig);
    }

    /**
     * A `site_credential` block as defined below.
     * 
     */
    @Import(name="siteCredentials")
    private @Nullable Output<List<WindowsFunctionAppSlotSiteCredentialArgs>> siteCredentials;

    /**
     * @return A `site_credential` block as defined below.
     * 
     */
    public Optional<Output<List<WindowsFunctionAppSlotSiteCredentialArgs>>> siteCredentials() {
        return Optional.ofNullable(this.siteCredentials);
    }

    /**
     * The access key which will be used to access the storage account for the Function App Slot.
     * 
     */
    @Import(name="storageAccountAccessKey")
    private @Nullable Output<String> storageAccountAccessKey;

    /**
     * @return The access key which will be used to access the storage account for the Function App Slot.
     * 
     */
    public Optional<Output<String>> storageAccountAccessKey() {
        return Optional.ofNullable(this.storageAccountAccessKey);
    }

    /**
     * The backend storage account name which will be used by this Function App Slot.
     * 
     */
    @Import(name="storageAccountName")
    private @Nullable Output<String> storageAccountName;

    /**
     * @return The backend storage account name which will be used by this Function App Slot.
     * 
     */
    public Optional<Output<String>> storageAccountName() {
        return Optional.ofNullable(this.storageAccountName);
    }

    /**
     * One or more `storage_account` blocks as defined below.
     * 
     */
    @Import(name="storageAccounts")
    private @Nullable Output<List<WindowsFunctionAppSlotStorageAccountArgs>> storageAccounts;

    /**
     * @return One or more `storage_account` blocks as defined below.
     * 
     */
    public Optional<Output<List<WindowsFunctionAppSlotStorageAccountArgs>>> storageAccounts() {
        return Optional.ofNullable(this.storageAccounts);
    }

    /**
     * The Key Vault Secret ID, optionally including version, that contains the Connection String to connect to the storage account for this Function App Slot.
     * 
     * &gt; **NOTE:** `storage_key_vault_secret_id` cannot be used with `storage_account_name`.
     * 
     * &gt; **NOTE:** `storage_key_vault_secret_id` used without a version will use the latest version of the secret, however, the service can take up to 24h to pick up a rotation of the latest version. See the [official docs](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#rotation) for more information.
     * 
     */
    @Import(name="storageKeyVaultSecretId")
    private @Nullable Output<String> storageKeyVaultSecretId;

    /**
     * @return The Key Vault Secret ID, optionally including version, that contains the Connection String to connect to the storage account for this Function App Slot.
     * 
     * &gt; **NOTE:** `storage_key_vault_secret_id` cannot be used with `storage_account_name`.
     * 
     * &gt; **NOTE:** `storage_key_vault_secret_id` used without a version will use the latest version of the secret, however, the service can take up to 24h to pick up a rotation of the latest version. See the [official docs](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#rotation) for more information.
     * 
     */
    public Optional<Output<String>> storageKeyVaultSecretId() {
        return Optional.ofNullable(this.storageKeyVaultSecretId);
    }

    /**
     * Should the Function App Slot use its Managed Identity to access storage.
     * 
     * &gt; **NOTE:** One of `storage_account_access_key` or `storage_uses_managed_identity` must be specified when using `storage_account_name`.
     * 
     */
    @Import(name="storageUsesManagedIdentity")
    private @Nullable Output<Boolean> storageUsesManagedIdentity;

    /**
     * @return Should the Function App Slot use its Managed Identity to access storage.
     * 
     * &gt; **NOTE:** One of `storage_account_access_key` or `storage_uses_managed_identity` must be specified when using `storage_account_name`.
     * 
     */
    public Optional<Output<Boolean>> storageUsesManagedIdentity() {
        return Optional.ofNullable(this.storageUsesManagedIdentity);
    }

    /**
     * A mapping of tags which should be assigned to the Windows Function App Slot.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A mapping of tags which should be assigned to the Windows Function App Slot.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    @Import(name="virtualNetworkSubnetId")
    private @Nullable Output<String> virtualNetworkSubnetId;

    public Optional<Output<String>> virtualNetworkSubnetId() {
        return Optional.ofNullable(this.virtualNetworkSubnetId);
    }

    private WindowsFunctionAppSlotState() {}

    private WindowsFunctionAppSlotState(WindowsFunctionAppSlotState $) {
        this.appSettings = $.appSettings;
        this.authSettings = $.authSettings;
        this.authSettingsV2 = $.authSettingsV2;
        this.backup = $.backup;
        this.builtinLoggingEnabled = $.builtinLoggingEnabled;
        this.clientCertificateEnabled = $.clientCertificateEnabled;
        this.clientCertificateExclusionPaths = $.clientCertificateExclusionPaths;
        this.clientCertificateMode = $.clientCertificateMode;
        this.connectionStrings = $.connectionStrings;
        this.contentShareForceDisabled = $.contentShareForceDisabled;
        this.customDomainVerificationId = $.customDomainVerificationId;
        this.dailyMemoryTimeQuota = $.dailyMemoryTimeQuota;
        this.defaultHostname = $.defaultHostname;
        this.enabled = $.enabled;
        this.functionAppId = $.functionAppId;
        this.functionsExtensionVersion = $.functionsExtensionVersion;
        this.hostingEnvironmentId = $.hostingEnvironmentId;
        this.httpsOnly = $.httpsOnly;
        this.identity = $.identity;
        this.keyVaultReferenceIdentityId = $.keyVaultReferenceIdentityId;
        this.kind = $.kind;
        this.name = $.name;
        this.outboundIpAddressLists = $.outboundIpAddressLists;
        this.outboundIpAddresses = $.outboundIpAddresses;
        this.possibleOutboundIpAddressLists = $.possibleOutboundIpAddressLists;
        this.possibleOutboundIpAddresses = $.possibleOutboundIpAddresses;
        this.publicNetworkAccessEnabled = $.publicNetworkAccessEnabled;
        this.servicePlanId = $.servicePlanId;
        this.siteConfig = $.siteConfig;
        this.siteCredentials = $.siteCredentials;
        this.storageAccountAccessKey = $.storageAccountAccessKey;
        this.storageAccountName = $.storageAccountName;
        this.storageAccounts = $.storageAccounts;
        this.storageKeyVaultSecretId = $.storageKeyVaultSecretId;
        this.storageUsesManagedIdentity = $.storageUsesManagedIdentity;
        this.tags = $.tags;
        this.virtualNetworkSubnetId = $.virtualNetworkSubnetId;
    }

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

    public static final class Builder {
        private WindowsFunctionAppSlotState $;

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

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

        /**
         * @param appSettings A map of key-value pairs for [App Settings](https://docs.microsoft.com/azure/azure-functions/functions-app-settings) and custom values.
         * 
         * @return builder
         * 
         */
        public Builder appSettings(@Nullable Output<Map<String,String>> appSettings) {
            $.appSettings = appSettings;
            return this;
        }

        /**
         * @param appSettings A map of key-value pairs for [App Settings](https://docs.microsoft.com/azure/azure-functions/functions-app-settings) and custom values.
         * 
         * @return builder
         * 
         */
        public Builder appSettings(Map<String,String> appSettings) {
            return appSettings(Output.of(appSettings));
        }

        /**
         * @param authSettings an `auth_settings` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder authSettings(@Nullable Output<WindowsFunctionAppSlotAuthSettingsArgs> authSettings) {
            $.authSettings = authSettings;
            return this;
        }

        /**
         * @param authSettings an `auth_settings` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder authSettings(WindowsFunctionAppSlotAuthSettingsArgs authSettings) {
            return authSettings(Output.of(authSettings));
        }

        /**
         * @param authSettingsV2 an `auth_settings_v2` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder authSettingsV2(@Nullable Output<WindowsFunctionAppSlotAuthSettingsV2Args> authSettingsV2) {
            $.authSettingsV2 = authSettingsV2;
            return this;
        }

        /**
         * @param authSettingsV2 an `auth_settings_v2` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder authSettingsV2(WindowsFunctionAppSlotAuthSettingsV2Args authSettingsV2) {
            return authSettingsV2(Output.of(authSettingsV2));
        }

        /**
         * @param backup a `backup` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder backup(@Nullable Output<WindowsFunctionAppSlotBackupArgs> backup) {
            $.backup = backup;
            return this;
        }

        /**
         * @param backup a `backup` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder backup(WindowsFunctionAppSlotBackupArgs backup) {
            return backup(Output.of(backup));
        }

        /**
         * @param builtinLoggingEnabled Should built-in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder builtinLoggingEnabled(@Nullable Output<Boolean> builtinLoggingEnabled) {
            $.builtinLoggingEnabled = builtinLoggingEnabled;
            return this;
        }

        /**
         * @param builtinLoggingEnabled Should built-in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder builtinLoggingEnabled(Boolean builtinLoggingEnabled) {
            return builtinLoggingEnabled(Output.of(builtinLoggingEnabled));
        }

        /**
         * @param clientCertificateEnabled Should the Function App Slot use Client Certificates.
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateEnabled(@Nullable Output<Boolean> clientCertificateEnabled) {
            $.clientCertificateEnabled = clientCertificateEnabled;
            return this;
        }

        /**
         * @param clientCertificateEnabled Should the Function App Slot use Client Certificates.
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateEnabled(Boolean clientCertificateEnabled) {
            return clientCertificateEnabled(Output.of(clientCertificateEnabled));
        }

        /**
         * @param clientCertificateExclusionPaths Paths to exclude when using client certificates, separated by ;
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateExclusionPaths(@Nullable Output<String> clientCertificateExclusionPaths) {
            $.clientCertificateExclusionPaths = clientCertificateExclusionPaths;
            return this;
        }

        /**
         * @param clientCertificateExclusionPaths Paths to exclude when using client certificates, separated by ;
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateExclusionPaths(String clientCertificateExclusionPaths) {
            return clientCertificateExclusionPaths(Output.of(clientCertificateExclusionPaths));
        }

        /**
         * @param clientCertificateMode The mode of the Function App Slot&#39;s client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`.
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateMode(@Nullable Output<String> clientCertificateMode) {
            $.clientCertificateMode = clientCertificateMode;
            return this;
        }

        /**
         * @param clientCertificateMode The mode of the Function App Slot&#39;s client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`.
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateMode(String clientCertificateMode) {
            return clientCertificateMode(Output.of(clientCertificateMode));
        }

        /**
         * @param connectionStrings a `connection_string` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(@Nullable Output<List<WindowsFunctionAppSlotConnectionStringArgs>> connectionStrings) {
            $.connectionStrings = connectionStrings;
            return this;
        }

        /**
         * @param connectionStrings a `connection_string` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(List<WindowsFunctionAppSlotConnectionStringArgs> connectionStrings) {
            return connectionStrings(Output.of(connectionStrings));
        }

        /**
         * @param connectionStrings a `connection_string` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(WindowsFunctionAppSlotConnectionStringArgs... connectionStrings) {
            return connectionStrings(List.of(connectionStrings));
        }

        /**
         * @param contentShareForceDisabled Force disable the content share settings.
         * 
         * @return builder
         * 
         */
        public Builder contentShareForceDisabled(@Nullable Output<Boolean> contentShareForceDisabled) {
            $.contentShareForceDisabled = contentShareForceDisabled;
            return this;
        }

        /**
         * @param contentShareForceDisabled Force disable the content share settings.
         * 
         * @return builder
         * 
         */
        public Builder contentShareForceDisabled(Boolean contentShareForceDisabled) {
            return contentShareForceDisabled(Output.of(contentShareForceDisabled));
        }

        /**
         * @param customDomainVerificationId The identifier used by App Service to perform domain ownership verification via DNS TXT record.
         * 
         * @return builder
         * 
         */
        public Builder customDomainVerificationId(@Nullable Output<String> customDomainVerificationId) {
            $.customDomainVerificationId = customDomainVerificationId;
            return this;
        }

        /**
         * @param customDomainVerificationId The identifier used by App Service to perform domain ownership verification via DNS TXT record.
         * 
         * @return builder
         * 
         */
        public Builder customDomainVerificationId(String customDomainVerificationId) {
            return customDomainVerificationId(Output.of(customDomainVerificationId));
        }

        /**
         * @param dailyMemoryTimeQuota The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans. Defaults to `0`.
         * 
         * @return builder
         * 
         */
        public Builder dailyMemoryTimeQuota(@Nullable Output<Integer> dailyMemoryTimeQuota) {
            $.dailyMemoryTimeQuota = dailyMemoryTimeQuota;
            return this;
        }

        /**
         * @param dailyMemoryTimeQuota The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans. Defaults to `0`.
         * 
         * @return builder
         * 
         */
        public Builder dailyMemoryTimeQuota(Integer dailyMemoryTimeQuota) {
            return dailyMemoryTimeQuota(Output.of(dailyMemoryTimeQuota));
        }

        /**
         * @param defaultHostname The default hostname of the Windows Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder defaultHostname(@Nullable Output<String> defaultHostname) {
            $.defaultHostname = defaultHostname;
            return this;
        }

        /**
         * @param defaultHostname The default hostname of the Windows Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder defaultHostname(String defaultHostname) {
            return defaultHostname(Output.of(defaultHostname));
        }

        /**
         * @param enabled Is the Windows Function App Slot enabled. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(@Nullable Output<Boolean> enabled) {
            $.enabled = enabled;
            return this;
        }

        /**
         * @param enabled Is the Windows Function App Slot enabled. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(Boolean enabled) {
            return enabled(Output.of(enabled));
        }

        /**
         * @param functionAppId The name of the Windows Function App this Slot is a member of. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder functionAppId(@Nullable Output<String> functionAppId) {
            $.functionAppId = functionAppId;
            return this;
        }

        /**
         * @param functionAppId The name of the Windows Function App this Slot is a member of. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder functionAppId(String functionAppId) {
            return functionAppId(Output.of(functionAppId));
        }

        /**
         * @param functionsExtensionVersion The runtime version associated with the Function App Slot. Defaults to `~4`.
         * 
         * @return builder
         * 
         */
        public Builder functionsExtensionVersion(@Nullable Output<String> functionsExtensionVersion) {
            $.functionsExtensionVersion = functionsExtensionVersion;
            return this;
        }

        /**
         * @param functionsExtensionVersion The runtime version associated with the Function App Slot. Defaults to `~4`.
         * 
         * @return builder
         * 
         */
        public Builder functionsExtensionVersion(String functionsExtensionVersion) {
            return functionsExtensionVersion(Output.of(functionsExtensionVersion));
        }

        /**
         * @param hostingEnvironmentId The ID of the App Service Environment used by Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder hostingEnvironmentId(@Nullable Output<String> hostingEnvironmentId) {
            $.hostingEnvironmentId = hostingEnvironmentId;
            return this;
        }

        /**
         * @param hostingEnvironmentId The ID of the App Service Environment used by Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder hostingEnvironmentId(String hostingEnvironmentId) {
            return hostingEnvironmentId(Output.of(hostingEnvironmentId));
        }

        /**
         * @param httpsOnly Can the Function App Slot only be accessed via HTTPS?
         * 
         * @return builder
         * 
         */
        public Builder httpsOnly(@Nullable Output<Boolean> httpsOnly) {
            $.httpsOnly = httpsOnly;
            return this;
        }

        /**
         * @param httpsOnly Can the Function App Slot only be accessed via HTTPS?
         * 
         * @return builder
         * 
         */
        public Builder httpsOnly(Boolean httpsOnly) {
            return httpsOnly(Output.of(httpsOnly));
        }

        /**
         * @param identity an `identity` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder identity(@Nullable Output<WindowsFunctionAppSlotIdentityArgs> identity) {
            $.identity = identity;
            return this;
        }

        /**
         * @param identity an `identity` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder identity(WindowsFunctionAppSlotIdentityArgs identity) {
            return identity(Output.of(identity));
        }

        /**
         * @param keyVaultReferenceIdentityId The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
         * 
         * @return builder
         * 
         */
        public Builder keyVaultReferenceIdentityId(@Nullable Output<String> keyVaultReferenceIdentityId) {
            $.keyVaultReferenceIdentityId = keyVaultReferenceIdentityId;
            return this;
        }

        /**
         * @param keyVaultReferenceIdentityId The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
         * 
         * @return builder
         * 
         */
        public Builder keyVaultReferenceIdentityId(String keyVaultReferenceIdentityId) {
            return keyVaultReferenceIdentityId(Output.of(keyVaultReferenceIdentityId));
        }

        /**
         * @param kind The Kind value for this Windows Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder kind(@Nullable Output<String> kind) {
            $.kind = kind;
            return this;
        }

        /**
         * @param kind The Kind value for this Windows Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder kind(String kind) {
            return kind(Output.of(kind));
        }

        /**
         * @param name Specifies the name of the Windows Function App Slot. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Specifies the name of the Windows Function App Slot. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param outboundIpAddressLists A list of outbound IP addresses. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressLists(@Nullable Output<List<String>> outboundIpAddressLists) {
            $.outboundIpAddressLists = outboundIpAddressLists;
            return this;
        }

        /**
         * @param outboundIpAddressLists A list of outbound IP addresses. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressLists(List<String> outboundIpAddressLists) {
            return outboundIpAddressLists(Output.of(outboundIpAddressLists));
        }

        /**
         * @param outboundIpAddressLists A list of outbound IP addresses. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressLists(String... outboundIpAddressLists) {
            return outboundIpAddressLists(List.of(outboundIpAddressLists));
        }

        /**
         * @param outboundIpAddresses A comma separated list of outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12`.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddresses(@Nullable Output<String> outboundIpAddresses) {
            $.outboundIpAddresses = outboundIpAddresses;
            return this;
        }

        /**
         * @param outboundIpAddresses A comma separated list of outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12`.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddresses(String outboundIpAddresses) {
            return outboundIpAddresses(Output.of(outboundIpAddresses));
        }

        /**
         * @param possibleOutboundIpAddressLists A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddressLists(@Nullable Output<List<String>> possibleOutboundIpAddressLists) {
            $.possibleOutboundIpAddressLists = possibleOutboundIpAddressLists;
            return this;
        }

        /**
         * @param possibleOutboundIpAddressLists A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddressLists(List<String> possibleOutboundIpAddressLists) {
            return possibleOutboundIpAddressLists(Output.of(possibleOutboundIpAddressLists));
        }

        /**
         * @param possibleOutboundIpAddressLists A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddressLists(String... possibleOutboundIpAddressLists) {
            return possibleOutboundIpAddressLists(List.of(possibleOutboundIpAddressLists));
        }

        /**
         * @param possibleOutboundIpAddresses A comma separated list of possible outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12,52.143.43.17`. This is a superset of `outbound_ip_addresses`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;,&#34;52.143.43.17&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddresses(@Nullable Output<String> possibleOutboundIpAddresses) {
            $.possibleOutboundIpAddresses = possibleOutboundIpAddresses;
            return this;
        }

        /**
         * @param possibleOutboundIpAddresses A comma separated list of possible outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12,52.143.43.17`. This is a superset of `outbound_ip_addresses`. For example `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;,&#34;52.143.43.17&#34;]`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddresses(String possibleOutboundIpAddresses) {
            return possibleOutboundIpAddresses(Output.of(possibleOutboundIpAddresses));
        }

        /**
         * @param publicNetworkAccessEnabled Should public network access be enabled for the Function App. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder publicNetworkAccessEnabled(@Nullable Output<Boolean> publicNetworkAccessEnabled) {
            $.publicNetworkAccessEnabled = publicNetworkAccessEnabled;
            return this;
        }

        /**
         * @param publicNetworkAccessEnabled Should public network access be enabled for the Function App. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder publicNetworkAccessEnabled(Boolean publicNetworkAccessEnabled) {
            return publicNetworkAccessEnabled(Output.of(publicNetworkAccessEnabled));
        }

        /**
         * @param servicePlanId The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Function App will be used.
         * 
         * @return builder
         * 
         */
        public Builder servicePlanId(@Nullable Output<String> servicePlanId) {
            $.servicePlanId = servicePlanId;
            return this;
        }

        /**
         * @param servicePlanId The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Function App will be used.
         * 
         * @return builder
         * 
         */
        public Builder servicePlanId(String servicePlanId) {
            return servicePlanId(Output.of(servicePlanId));
        }

        /**
         * @param siteConfig a `site_config` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder siteConfig(@Nullable Output<WindowsFunctionAppSlotSiteConfigArgs> siteConfig) {
            $.siteConfig = siteConfig;
            return this;
        }

        /**
         * @param siteConfig a `site_config` block as detailed below.
         * 
         * @return builder
         * 
         */
        public Builder siteConfig(WindowsFunctionAppSlotSiteConfigArgs siteConfig) {
            return siteConfig(Output.of(siteConfig));
        }

        /**
         * @param siteCredentials A `site_credential` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteCredentials(@Nullable Output<List<WindowsFunctionAppSlotSiteCredentialArgs>> siteCredentials) {
            $.siteCredentials = siteCredentials;
            return this;
        }

        /**
         * @param siteCredentials A `site_credential` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteCredentials(List<WindowsFunctionAppSlotSiteCredentialArgs> siteCredentials) {
            return siteCredentials(Output.of(siteCredentials));
        }

        /**
         * @param siteCredentials A `site_credential` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteCredentials(WindowsFunctionAppSlotSiteCredentialArgs... siteCredentials) {
            return siteCredentials(List.of(siteCredentials));
        }

        /**
         * @param storageAccountAccessKey The access key which will be used to access the storage account for the Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder storageAccountAccessKey(@Nullable Output<String> storageAccountAccessKey) {
            $.storageAccountAccessKey = storageAccountAccessKey;
            return this;
        }

        /**
         * @param storageAccountAccessKey The access key which will be used to access the storage account for the Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder storageAccountAccessKey(String storageAccountAccessKey) {
            return storageAccountAccessKey(Output.of(storageAccountAccessKey));
        }

        /**
         * @param storageAccountName The backend storage account name which will be used by this Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder storageAccountName(@Nullable Output<String> storageAccountName) {
            $.storageAccountName = storageAccountName;
            return this;
        }

        /**
         * @param storageAccountName The backend storage account name which will be used by this Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder storageAccountName(String storageAccountName) {
            return storageAccountName(Output.of(storageAccountName));
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(@Nullable Output<List<WindowsFunctionAppSlotStorageAccountArgs>> storageAccounts) {
            $.storageAccounts = storageAccounts;
            return this;
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(List<WindowsFunctionAppSlotStorageAccountArgs> storageAccounts) {
            return storageAccounts(Output.of(storageAccounts));
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(WindowsFunctionAppSlotStorageAccountArgs... storageAccounts) {
            return storageAccounts(List.of(storageAccounts));
        }

        /**
         * @param storageKeyVaultSecretId The Key Vault Secret ID, optionally including version, that contains the Connection String to connect to the storage account for this Function App Slot.
         * 
         * &gt; **NOTE:** `storage_key_vault_secret_id` cannot be used with `storage_account_name`.
         * 
         * &gt; **NOTE:** `storage_key_vault_secret_id` used without a version will use the latest version of the secret, however, the service can take up to 24h to pick up a rotation of the latest version. See the [official docs](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#rotation) for more information.
         * 
         * @return builder
         * 
         */
        public Builder storageKeyVaultSecretId(@Nullable Output<String> storageKeyVaultSecretId) {
            $.storageKeyVaultSecretId = storageKeyVaultSecretId;
            return this;
        }

        /**
         * @param storageKeyVaultSecretId The Key Vault Secret ID, optionally including version, that contains the Connection String to connect to the storage account for this Function App Slot.
         * 
         * &gt; **NOTE:** `storage_key_vault_secret_id` cannot be used with `storage_account_name`.
         * 
         * &gt; **NOTE:** `storage_key_vault_secret_id` used without a version will use the latest version of the secret, however, the service can take up to 24h to pick up a rotation of the latest version. See the [official docs](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#rotation) for more information.
         * 
         * @return builder
         * 
         */
        public Builder storageKeyVaultSecretId(String storageKeyVaultSecretId) {
            return storageKeyVaultSecretId(Output.of(storageKeyVaultSecretId));
        }

        /**
         * @param storageUsesManagedIdentity Should the Function App Slot use its Managed Identity to access storage.
         * 
         * &gt; **NOTE:** One of `storage_account_access_key` or `storage_uses_managed_identity` must be specified when using `storage_account_name`.
         * 
         * @return builder
         * 
         */
        public Builder storageUsesManagedIdentity(@Nullable Output<Boolean> storageUsesManagedIdentity) {
            $.storageUsesManagedIdentity = storageUsesManagedIdentity;
            return this;
        }

        /**
         * @param storageUsesManagedIdentity Should the Function App Slot use its Managed Identity to access storage.
         * 
         * &gt; **NOTE:** One of `storage_account_access_key` or `storage_uses_managed_identity` must be specified when using `storage_account_name`.
         * 
         * @return builder
         * 
         */
        public Builder storageUsesManagedIdentity(Boolean storageUsesManagedIdentity) {
            return storageUsesManagedIdentity(Output.of(storageUsesManagedIdentity));
        }

        /**
         * @param tags A mapping of tags which should be assigned to the Windows Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags which should be assigned to the Windows Function App Slot.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

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

        public Builder virtualNetworkSubnetId(String virtualNetworkSubnetId) {
            return virtualNetworkSubnetId(Output.of(virtualNetworkSubnetId));
        }

        public WindowsFunctionAppSlotState build() {
            return $;
        }
    }

}
