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

import com.pulumi.aws.cloudfront.inputs.CachePolicyParametersInCacheKeyAndForwardedToOriginCookiesConfigArgs;
import com.pulumi.aws.cloudfront.inputs.CachePolicyParametersInCacheKeyAndForwardedToOriginHeadersConfigArgs;
import com.pulumi.aws.cloudfront.inputs.CachePolicyParametersInCacheKeyAndForwardedToOriginQueryStringsConfigArgs;
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 CachePolicyParametersInCacheKeyAndForwardedToOriginArgs extends com.pulumi.resources.ResourceArgs {

    public static final CachePolicyParametersInCacheKeyAndForwardedToOriginArgs Empty = new CachePolicyParametersInCacheKeyAndForwardedToOriginArgs();

    /**
     * Object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Cookies Config for more information.
     * 
     */
    @Import(name="cookiesConfig", required=true)
    private Output<CachePolicyParametersInCacheKeyAndForwardedToOriginCookiesConfigArgs> cookiesConfig;

    /**
     * @return Object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Cookies Config for more information.
     * 
     */
    public Output<CachePolicyParametersInCacheKeyAndForwardedToOriginCookiesConfigArgs> cookiesConfig() {
        return this.cookiesConfig;
    }

    /**
     * A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
     * 
     */
    @Import(name="enableAcceptEncodingBrotli")
    private @Nullable Output<Boolean> enableAcceptEncodingBrotli;

    /**
     * @return A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
     * 
     */
    public Optional<Output<Boolean>> enableAcceptEncodingBrotli() {
        return Optional.ofNullable(this.enableAcceptEncodingBrotli);
    }

    /**
     * A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
     * 
     */
    @Import(name="enableAcceptEncodingGzip")
    private @Nullable Output<Boolean> enableAcceptEncodingGzip;

    /**
     * @return A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
     * 
     */
    public Optional<Output<Boolean>> enableAcceptEncodingGzip() {
        return Optional.ofNullable(this.enableAcceptEncodingGzip);
    }

    /**
     * Object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Headers Config for more information.
     * 
     */
    @Import(name="headersConfig", required=true)
    private Output<CachePolicyParametersInCacheKeyAndForwardedToOriginHeadersConfigArgs> headersConfig;

    /**
     * @return Object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Headers Config for more information.
     * 
     */
    public Output<CachePolicyParametersInCacheKeyAndForwardedToOriginHeadersConfigArgs> headersConfig() {
        return this.headersConfig;
    }

    /**
     * Object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Query String Config for more information.
     * 
     */
    @Import(name="queryStringsConfig", required=true)
    private Output<CachePolicyParametersInCacheKeyAndForwardedToOriginQueryStringsConfigArgs> queryStringsConfig;

    /**
     * @return Object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Query String Config for more information.
     * 
     */
    public Output<CachePolicyParametersInCacheKeyAndForwardedToOriginQueryStringsConfigArgs> queryStringsConfig() {
        return this.queryStringsConfig;
    }

    private CachePolicyParametersInCacheKeyAndForwardedToOriginArgs() {}

    private CachePolicyParametersInCacheKeyAndForwardedToOriginArgs(CachePolicyParametersInCacheKeyAndForwardedToOriginArgs $) {
        this.cookiesConfig = $.cookiesConfig;
        this.enableAcceptEncodingBrotli = $.enableAcceptEncodingBrotli;
        this.enableAcceptEncodingGzip = $.enableAcceptEncodingGzip;
        this.headersConfig = $.headersConfig;
        this.queryStringsConfig = $.queryStringsConfig;
    }

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

    public static final class Builder {
        private CachePolicyParametersInCacheKeyAndForwardedToOriginArgs $;

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

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

        /**
         * @param cookiesConfig Object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Cookies Config for more information.
         * 
         * @return builder
         * 
         */
        public Builder cookiesConfig(Output<CachePolicyParametersInCacheKeyAndForwardedToOriginCookiesConfigArgs> cookiesConfig) {
            $.cookiesConfig = cookiesConfig;
            return this;
        }

        /**
         * @param cookiesConfig Object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Cookies Config for more information.
         * 
         * @return builder
         * 
         */
        public Builder cookiesConfig(CachePolicyParametersInCacheKeyAndForwardedToOriginCookiesConfigArgs cookiesConfig) {
            return cookiesConfig(Output.of(cookiesConfig));
        }

        /**
         * @param enableAcceptEncodingBrotli A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
         * 
         * @return builder
         * 
         */
        public Builder enableAcceptEncodingBrotli(@Nullable Output<Boolean> enableAcceptEncodingBrotli) {
            $.enableAcceptEncodingBrotli = enableAcceptEncodingBrotli;
            return this;
        }

        /**
         * @param enableAcceptEncodingBrotli A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
         * 
         * @return builder
         * 
         */
        public Builder enableAcceptEncodingBrotli(Boolean enableAcceptEncodingBrotli) {
            return enableAcceptEncodingBrotli(Output.of(enableAcceptEncodingBrotli));
        }

        /**
         * @param enableAcceptEncodingGzip A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
         * 
         * @return builder
         * 
         */
        public Builder enableAcceptEncodingGzip(@Nullable Output<Boolean> enableAcceptEncodingGzip) {
            $.enableAcceptEncodingGzip = enableAcceptEncodingGzip;
            return this;
        }

        /**
         * @param enableAcceptEncodingGzip A flag that can affect whether the Accept-Encoding HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.
         * 
         * @return builder
         * 
         */
        public Builder enableAcceptEncodingGzip(Boolean enableAcceptEncodingGzip) {
            return enableAcceptEncodingGzip(Output.of(enableAcceptEncodingGzip));
        }

        /**
         * @param headersConfig Object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Headers Config for more information.
         * 
         * @return builder
         * 
         */
        public Builder headersConfig(Output<CachePolicyParametersInCacheKeyAndForwardedToOriginHeadersConfigArgs> headersConfig) {
            $.headersConfig = headersConfig;
            return this;
        }

        /**
         * @param headersConfig Object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Headers Config for more information.
         * 
         * @return builder
         * 
         */
        public Builder headersConfig(CachePolicyParametersInCacheKeyAndForwardedToOriginHeadersConfigArgs headersConfig) {
            return headersConfig(Output.of(headersConfig));
        }

        /**
         * @param queryStringsConfig Object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Query String Config for more information.
         * 
         * @return builder
         * 
         */
        public Builder queryStringsConfig(Output<CachePolicyParametersInCacheKeyAndForwardedToOriginQueryStringsConfigArgs> queryStringsConfig) {
            $.queryStringsConfig = queryStringsConfig;
            return this;
        }

        /**
         * @param queryStringsConfig Object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and automatically included in requests that CloudFront sends to the origin. See Query String Config for more information.
         * 
         * @return builder
         * 
         */
        public Builder queryStringsConfig(CachePolicyParametersInCacheKeyAndForwardedToOriginQueryStringsConfigArgs queryStringsConfig) {
            return queryStringsConfig(Output.of(queryStringsConfig));
        }

        public CachePolicyParametersInCacheKeyAndForwardedToOriginArgs build() {
            $.cookiesConfig = Objects.requireNonNull($.cookiesConfig, "expected parameter 'cookiesConfig' to be non-null");
            $.headersConfig = Objects.requireNonNull($.headersConfig, "expected parameter 'headersConfig' to be non-null");
            $.queryStringsConfig = Objects.requireNonNull($.queryStringsConfig, "expected parameter 'queryStringsConfig' to be non-null");
            return $;
        }
    }

}
