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

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


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

    public static final FrontdoorRouteCacheArgs Empty = new FrontdoorRouteCacheArgs();

    /**
     * Is content compression enabled? Possible values are `true` or `false`. Defaults to `false`.
     * 
     * &gt; **NOTE:** Content won&#39;t be compressed when the requested content is smaller than `1 KB` or larger than `8 MB`(inclusive).
     * 
     */
    @Import(name="compressionEnabled")
    private @Nullable Output<Boolean> compressionEnabled;

    /**
     * @return Is content compression enabled? Possible values are `true` or `false`. Defaults to `false`.
     * 
     * &gt; **NOTE:** Content won&#39;t be compressed when the requested content is smaller than `1 KB` or larger than `8 MB`(inclusive).
     * 
     */
    public Optional<Output<Boolean>> compressionEnabled() {
        return Optional.ofNullable(this.compressionEnabled);
    }

    /**
     * A list of one or more `Content types` (formerly known as `MIME types`) to compress. Possible values include `application/eot`, `application/font`, `application/font-sfnt`, `application/javascript`, `application/json`, `application/opentype`, `application/otf`, `application/pkcs7-mime`, `application/truetype`, `application/ttf`, `application/vnd.ms-fontobject`, `application/xhtml+xml`, `application/xml`, `application/xml+rss`, `application/x-font-opentype`, `application/x-font-truetype`, `application/x-font-ttf`, `application/x-httpd-cgi`, `application/x-mpegurl`, `application/x-opentype`, `application/x-otf`, `application/x-perl`, `application/x-ttf`, `application/x-javascript`, `font/eot`, `font/ttf`, `font/otf`, `font/opentype`, `image/svg+xml`, `text/css`, `text/csv`, `text/html`, `text/javascript`, `text/js`, `text/plain`, `text/richtext`, `text/tab-separated-values`, `text/xml`, `text/x-script`, `text/x-component` or `text/x-java-source`.
     * 
     */
    @Import(name="contentTypesToCompresses")
    private @Nullable Output<List<String>> contentTypesToCompresses;

    /**
     * @return A list of one or more `Content types` (formerly known as `MIME types`) to compress. Possible values include `application/eot`, `application/font`, `application/font-sfnt`, `application/javascript`, `application/json`, `application/opentype`, `application/otf`, `application/pkcs7-mime`, `application/truetype`, `application/ttf`, `application/vnd.ms-fontobject`, `application/xhtml+xml`, `application/xml`, `application/xml+rss`, `application/x-font-opentype`, `application/x-font-truetype`, `application/x-font-ttf`, `application/x-httpd-cgi`, `application/x-mpegurl`, `application/x-opentype`, `application/x-otf`, `application/x-perl`, `application/x-ttf`, `application/x-javascript`, `font/eot`, `font/ttf`, `font/otf`, `font/opentype`, `image/svg+xml`, `text/css`, `text/csv`, `text/html`, `text/javascript`, `text/js`, `text/plain`, `text/richtext`, `text/tab-separated-values`, `text/xml`, `text/x-script`, `text/x-component` or `text/x-java-source`.
     * 
     */
    public Optional<Output<List<String>>> contentTypesToCompresses() {
        return Optional.ofNullable(this.contentTypesToCompresses);
    }

    /**
     * Defines how the Front Door Route will cache requests that include query strings. Possible values include `IgnoreQueryString`, `IgnoreSpecifiedQueryStrings`, `IncludeSpecifiedQueryStrings` or `UseQueryString`. Defaults it `IgnoreQueryString`.
     * 
     * &gt; **NOTE:** The value of the `query_string_caching_behavior` determines if the `query_strings` field will be used as an include list or an ignore list.
     * 
     */
    @Import(name="queryStringCachingBehavior")
    private @Nullable Output<String> queryStringCachingBehavior;

    /**
     * @return Defines how the Front Door Route will cache requests that include query strings. Possible values include `IgnoreQueryString`, `IgnoreSpecifiedQueryStrings`, `IncludeSpecifiedQueryStrings` or `UseQueryString`. Defaults it `IgnoreQueryString`.
     * 
     * &gt; **NOTE:** The value of the `query_string_caching_behavior` determines if the `query_strings` field will be used as an include list or an ignore list.
     * 
     */
    public Optional<Output<String>> queryStringCachingBehavior() {
        return Optional.ofNullable(this.queryStringCachingBehavior);
    }

    /**
     * Query strings to include or ignore.
     * 
     */
    @Import(name="queryStrings")
    private @Nullable Output<List<String>> queryStrings;

    /**
     * @return Query strings to include or ignore.
     * 
     */
    public Optional<Output<List<String>>> queryStrings() {
        return Optional.ofNullable(this.queryStrings);
    }

    private FrontdoorRouteCacheArgs() {}

    private FrontdoorRouteCacheArgs(FrontdoorRouteCacheArgs $) {
        this.compressionEnabled = $.compressionEnabled;
        this.contentTypesToCompresses = $.contentTypesToCompresses;
        this.queryStringCachingBehavior = $.queryStringCachingBehavior;
        this.queryStrings = $.queryStrings;
    }

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

    public static final class Builder {
        private FrontdoorRouteCacheArgs $;

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

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

        /**
         * @param compressionEnabled Is content compression enabled? Possible values are `true` or `false`. Defaults to `false`.
         * 
         * &gt; **NOTE:** Content won&#39;t be compressed when the requested content is smaller than `1 KB` or larger than `8 MB`(inclusive).
         * 
         * @return builder
         * 
         */
        public Builder compressionEnabled(@Nullable Output<Boolean> compressionEnabled) {
            $.compressionEnabled = compressionEnabled;
            return this;
        }

        /**
         * @param compressionEnabled Is content compression enabled? Possible values are `true` or `false`. Defaults to `false`.
         * 
         * &gt; **NOTE:** Content won&#39;t be compressed when the requested content is smaller than `1 KB` or larger than `8 MB`(inclusive).
         * 
         * @return builder
         * 
         */
        public Builder compressionEnabled(Boolean compressionEnabled) {
            return compressionEnabled(Output.of(compressionEnabled));
        }

        /**
         * @param contentTypesToCompresses A list of one or more `Content types` (formerly known as `MIME types`) to compress. Possible values include `application/eot`, `application/font`, `application/font-sfnt`, `application/javascript`, `application/json`, `application/opentype`, `application/otf`, `application/pkcs7-mime`, `application/truetype`, `application/ttf`, `application/vnd.ms-fontobject`, `application/xhtml+xml`, `application/xml`, `application/xml+rss`, `application/x-font-opentype`, `application/x-font-truetype`, `application/x-font-ttf`, `application/x-httpd-cgi`, `application/x-mpegurl`, `application/x-opentype`, `application/x-otf`, `application/x-perl`, `application/x-ttf`, `application/x-javascript`, `font/eot`, `font/ttf`, `font/otf`, `font/opentype`, `image/svg+xml`, `text/css`, `text/csv`, `text/html`, `text/javascript`, `text/js`, `text/plain`, `text/richtext`, `text/tab-separated-values`, `text/xml`, `text/x-script`, `text/x-component` or `text/x-java-source`.
         * 
         * @return builder
         * 
         */
        public Builder contentTypesToCompresses(@Nullable Output<List<String>> contentTypesToCompresses) {
            $.contentTypesToCompresses = contentTypesToCompresses;
            return this;
        }

        /**
         * @param contentTypesToCompresses A list of one or more `Content types` (formerly known as `MIME types`) to compress. Possible values include `application/eot`, `application/font`, `application/font-sfnt`, `application/javascript`, `application/json`, `application/opentype`, `application/otf`, `application/pkcs7-mime`, `application/truetype`, `application/ttf`, `application/vnd.ms-fontobject`, `application/xhtml+xml`, `application/xml`, `application/xml+rss`, `application/x-font-opentype`, `application/x-font-truetype`, `application/x-font-ttf`, `application/x-httpd-cgi`, `application/x-mpegurl`, `application/x-opentype`, `application/x-otf`, `application/x-perl`, `application/x-ttf`, `application/x-javascript`, `font/eot`, `font/ttf`, `font/otf`, `font/opentype`, `image/svg+xml`, `text/css`, `text/csv`, `text/html`, `text/javascript`, `text/js`, `text/plain`, `text/richtext`, `text/tab-separated-values`, `text/xml`, `text/x-script`, `text/x-component` or `text/x-java-source`.
         * 
         * @return builder
         * 
         */
        public Builder contentTypesToCompresses(List<String> contentTypesToCompresses) {
            return contentTypesToCompresses(Output.of(contentTypesToCompresses));
        }

        /**
         * @param contentTypesToCompresses A list of one or more `Content types` (formerly known as `MIME types`) to compress. Possible values include `application/eot`, `application/font`, `application/font-sfnt`, `application/javascript`, `application/json`, `application/opentype`, `application/otf`, `application/pkcs7-mime`, `application/truetype`, `application/ttf`, `application/vnd.ms-fontobject`, `application/xhtml+xml`, `application/xml`, `application/xml+rss`, `application/x-font-opentype`, `application/x-font-truetype`, `application/x-font-ttf`, `application/x-httpd-cgi`, `application/x-mpegurl`, `application/x-opentype`, `application/x-otf`, `application/x-perl`, `application/x-ttf`, `application/x-javascript`, `font/eot`, `font/ttf`, `font/otf`, `font/opentype`, `image/svg+xml`, `text/css`, `text/csv`, `text/html`, `text/javascript`, `text/js`, `text/plain`, `text/richtext`, `text/tab-separated-values`, `text/xml`, `text/x-script`, `text/x-component` or `text/x-java-source`.
         * 
         * @return builder
         * 
         */
        public Builder contentTypesToCompresses(String... contentTypesToCompresses) {
            return contentTypesToCompresses(List.of(contentTypesToCompresses));
        }

        /**
         * @param queryStringCachingBehavior Defines how the Front Door Route will cache requests that include query strings. Possible values include `IgnoreQueryString`, `IgnoreSpecifiedQueryStrings`, `IncludeSpecifiedQueryStrings` or `UseQueryString`. Defaults it `IgnoreQueryString`.
         * 
         * &gt; **NOTE:** The value of the `query_string_caching_behavior` determines if the `query_strings` field will be used as an include list or an ignore list.
         * 
         * @return builder
         * 
         */
        public Builder queryStringCachingBehavior(@Nullable Output<String> queryStringCachingBehavior) {
            $.queryStringCachingBehavior = queryStringCachingBehavior;
            return this;
        }

        /**
         * @param queryStringCachingBehavior Defines how the Front Door Route will cache requests that include query strings. Possible values include `IgnoreQueryString`, `IgnoreSpecifiedQueryStrings`, `IncludeSpecifiedQueryStrings` or `UseQueryString`. Defaults it `IgnoreQueryString`.
         * 
         * &gt; **NOTE:** The value of the `query_string_caching_behavior` determines if the `query_strings` field will be used as an include list or an ignore list.
         * 
         * @return builder
         * 
         */
        public Builder queryStringCachingBehavior(String queryStringCachingBehavior) {
            return queryStringCachingBehavior(Output.of(queryStringCachingBehavior));
        }

        /**
         * @param queryStrings Query strings to include or ignore.
         * 
         * @return builder
         * 
         */
        public Builder queryStrings(@Nullable Output<List<String>> queryStrings) {
            $.queryStrings = queryStrings;
            return this;
        }

        /**
         * @param queryStrings Query strings to include or ignore.
         * 
         * @return builder
         * 
         */
        public Builder queryStrings(List<String> queryStrings) {
            return queryStrings(Output.of(queryStrings));
        }

        /**
         * @param queryStrings Query strings to include or ignore.
         * 
         * @return builder
         * 
         */
        public Builder queryStrings(String... queryStrings) {
            return queryStrings(List.of(queryStrings));
        }

        public FrontdoorRouteCacheArgs build() {
            return $;
        }
    }

}
