// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.

package waf

import (
	"fmt"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awsutil"
	"github.com/aws/aws-sdk-go/aws/request"
	"github.com/aws/aws-sdk-go/private/protocol"
	"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
)

const opCreateByteMatchSet = "CreateByteMatchSet"

// CreateByteMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateByteMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateByteMatchSet for more information on using the CreateByteMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateByteMatchSetRequest method.
//    req, resp := client.CreateByteMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateByteMatchSet
func (c *WAF) CreateByteMatchSetRequest(input *CreateByteMatchSetInput) (req *request.Request, output *CreateByteMatchSetOutput) {
	op := &request.Operation{
		Name:       opCreateByteMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateByteMatchSetInput{}
	}

	output = &CreateByteMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateByteMatchSet API operation for AWS WAF.
//
// Creates a ByteMatchSet. You then use UpdateByteMatchSet to identify the part
// of a web request that you want AWS WAF to inspect, such as the values of
// the User-Agent header or the query string. For example, you can create a
// ByteMatchSet that matches any requests with User-Agent headers that contain
// the string BadBot. You can then configure AWS WAF to reject those requests.
//
// To create and configure a ByteMatchSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateByteMatchSet request.
//
// Submit a CreateByteMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateByteMatchSet request.
//
// Submit an UpdateByteMatchSet request to specify the part of the request that
// you want AWS WAF to inspect (for example, the header or the URI) and the
// value that you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateByteMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateByteMatchSet
func (c *WAF) CreateByteMatchSet(input *CreateByteMatchSetInput) (*CreateByteMatchSetOutput, error) {
	req, out := c.CreateByteMatchSetRequest(input)
	return out, req.Send()
}

// CreateByteMatchSetWithContext is the same as CreateByteMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateByteMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateByteMatchSetWithContext(ctx aws.Context, input *CreateByteMatchSetInput, opts ...request.Option) (*CreateByteMatchSetOutput, error) {
	req, out := c.CreateByteMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateGeoMatchSet = "CreateGeoMatchSet"

// CreateGeoMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateGeoMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateGeoMatchSet for more information on using the CreateGeoMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateGeoMatchSetRequest method.
//    req, resp := client.CreateGeoMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateGeoMatchSet
func (c *WAF) CreateGeoMatchSetRequest(input *CreateGeoMatchSetInput) (req *request.Request, output *CreateGeoMatchSetOutput) {
	op := &request.Operation{
		Name:       opCreateGeoMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateGeoMatchSetInput{}
	}

	output = &CreateGeoMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateGeoMatchSet API operation for AWS WAF.
//
// Creates an GeoMatchSet, which you use to specify which web requests you want
// to allow or block based on the country that the requests originate from.
// For example, if you're receiving a lot of requests from one or more countries
// and you want to block the requests, you can create an GeoMatchSet that contains
// those countries and then configure AWS WAF to block the requests.
//
// To create and configure a GeoMatchSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateGeoMatchSet request.
//
// Submit a CreateGeoMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateGeoMatchSet request.
//
// Submit an UpdateGeoMatchSetSet request to specify the countries that you
// want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateGeoMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateGeoMatchSet
func (c *WAF) CreateGeoMatchSet(input *CreateGeoMatchSetInput) (*CreateGeoMatchSetOutput, error) {
	req, out := c.CreateGeoMatchSetRequest(input)
	return out, req.Send()
}

// CreateGeoMatchSetWithContext is the same as CreateGeoMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateGeoMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateGeoMatchSetWithContext(ctx aws.Context, input *CreateGeoMatchSetInput, opts ...request.Option) (*CreateGeoMatchSetOutput, error) {
	req, out := c.CreateGeoMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateIPSet = "CreateIPSet"

// CreateIPSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateIPSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateIPSet for more information on using the CreateIPSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateIPSetRequest method.
//    req, resp := client.CreateIPSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateIPSet
func (c *WAF) CreateIPSetRequest(input *CreateIPSetInput) (req *request.Request, output *CreateIPSetOutput) {
	op := &request.Operation{
		Name:       opCreateIPSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateIPSetInput{}
	}

	output = &CreateIPSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateIPSet API operation for AWS WAF.
//
// Creates an IPSet, which you use to specify which web requests that you want
// to allow or block based on the IP addresses that the requests originate from.
// For example, if you're receiving a lot of requests from one or more individual
// IP addresses or one or more ranges of IP addresses and you want to block
// the requests, you can create an IPSet that contains those IP addresses and
// then configure AWS WAF to block the requests.
//
// To create and configure an IPSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateIPSet request.
//
// Submit a CreateIPSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateIPSet request.
//
// Submit an UpdateIPSet request to specify the IP addresses that you want AWS
// WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateIPSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateIPSet
func (c *WAF) CreateIPSet(input *CreateIPSetInput) (*CreateIPSetOutput, error) {
	req, out := c.CreateIPSetRequest(input)
	return out, req.Send()
}

// CreateIPSetWithContext is the same as CreateIPSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateIPSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateIPSetWithContext(ctx aws.Context, input *CreateIPSetInput, opts ...request.Option) (*CreateIPSetOutput, error) {
	req, out := c.CreateIPSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateRateBasedRule = "CreateRateBasedRule"

// CreateRateBasedRuleRequest generates a "aws/request.Request" representing the
// client's request for the CreateRateBasedRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateRateBasedRule for more information on using the CreateRateBasedRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateRateBasedRuleRequest method.
//    req, resp := client.CreateRateBasedRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRateBasedRule
func (c *WAF) CreateRateBasedRuleRequest(input *CreateRateBasedRuleInput) (req *request.Request, output *CreateRateBasedRuleOutput) {
	op := &request.Operation{
		Name:       opCreateRateBasedRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateRateBasedRuleInput{}
	}

	output = &CreateRateBasedRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateRateBasedRule API operation for AWS WAF.
//
// Creates a RateBasedRule. The RateBasedRule contains a RateLimit, which specifies
// the maximum number of requests that AWS WAF allows from a specified IP address
// in a five-minute period. The RateBasedRule also contains the IPSet objects,
// ByteMatchSet objects, and other predicates that identify the requests that
// you want to count or block if these requests exceed the RateLimit.
//
// If you add more than one predicate to a RateBasedRule, a request not only
// must exceed the RateLimit, but it also must match all the specifications
// to be counted or blocked. For example, suppose you add the following to a
// RateBasedRule:
//
//    * An IPSet that matches the IP address 192.0.2.44/32
//
//    * A ByteMatchSet that matches BadBot in the User-Agent header
//
// Further, you specify a RateLimit of 15,000.
//
// You then add the RateBasedRule to a WebACL and specify that you want to block
// requests that meet the conditions in the rule. For a request to be blocked,
// it must come from the IP address 192.0.2.44 and the User-Agent header in
// the request must contain the value BadBot. Further, requests that match these
// two conditions must be received at a rate of more than 15,000 requests every
// five minutes. If both conditions are met and the rate is exceeded, AWS WAF
// blocks the requests. If the rate drops below 15,000 for a five-minute period,
// AWS WAF no longer blocks the requests.
//
// As a second example, suppose you want to limit requests to a particular page
// on your site. To do this, you could add the following to a RateBasedRule:
//
//    * A ByteMatchSet with FieldToMatch of URI
//
//    * A PositionalConstraint of STARTS_WITH
//
//    * A TargetString of login
//
// Further, you specify a RateLimit of 15,000.
//
// By adding this RateBasedRule to a WebACL, you could limit requests to your
// login page without affecting the rest of your site.
//
// To create and configure a RateBasedRule, perform the following steps:
//
// Create and update the predicates that you want to include in the rule. For
// more information, see CreateByteMatchSet, CreateIPSet, and CreateSqlInjectionMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateRule request.
//
// Submit a CreateRateBasedRule request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRule request.
//
// Submit an UpdateRateBasedRule request to specify the predicates that you
// want to include in the rule.
//
// Create and update a WebACL that contains the RateBasedRule. For more information,
// see CreateWebACL.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateRateBasedRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRateBasedRule
func (c *WAF) CreateRateBasedRule(input *CreateRateBasedRuleInput) (*CreateRateBasedRuleOutput, error) {
	req, out := c.CreateRateBasedRuleRequest(input)
	return out, req.Send()
}

// CreateRateBasedRuleWithContext is the same as CreateRateBasedRule with the addition of
// the ability to pass a context and additional request options.
//
// See CreateRateBasedRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateRateBasedRuleWithContext(ctx aws.Context, input *CreateRateBasedRuleInput, opts ...request.Option) (*CreateRateBasedRuleOutput, error) {
	req, out := c.CreateRateBasedRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateRegexMatchSet = "CreateRegexMatchSet"

// CreateRegexMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateRegexMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateRegexMatchSet for more information on using the CreateRegexMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateRegexMatchSetRequest method.
//    req, resp := client.CreateRegexMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRegexMatchSet
func (c *WAF) CreateRegexMatchSetRequest(input *CreateRegexMatchSetInput) (req *request.Request, output *CreateRegexMatchSetOutput) {
	op := &request.Operation{
		Name:       opCreateRegexMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateRegexMatchSetInput{}
	}

	output = &CreateRegexMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateRegexMatchSet API operation for AWS WAF.
//
// Creates a RegexMatchSet. You then use UpdateRegexMatchSet to identify the
// part of a web request that you want AWS WAF to inspect, such as the values
// of the User-Agent header or the query string. For example, you can create
// a RegexMatchSet that contains a RegexMatchTuple that looks for any requests
// with User-Agent headers that match a RegexPatternSet with pattern B[a@]dB[o0]t.
// You can then configure AWS WAF to reject those requests.
//
// To create and configure a RegexMatchSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateRegexMatchSet request.
//
// Submit a CreateRegexMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRegexMatchSet request.
//
// Submit an UpdateRegexMatchSet request to specify the part of the request
// that you want AWS WAF to inspect (for example, the header or the URI) and
// the value, using a RegexPatternSet, that you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateRegexMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRegexMatchSet
func (c *WAF) CreateRegexMatchSet(input *CreateRegexMatchSetInput) (*CreateRegexMatchSetOutput, error) {
	req, out := c.CreateRegexMatchSetRequest(input)
	return out, req.Send()
}

// CreateRegexMatchSetWithContext is the same as CreateRegexMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateRegexMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateRegexMatchSetWithContext(ctx aws.Context, input *CreateRegexMatchSetInput, opts ...request.Option) (*CreateRegexMatchSetOutput, error) {
	req, out := c.CreateRegexMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateRegexPatternSet = "CreateRegexPatternSet"

// CreateRegexPatternSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateRegexPatternSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateRegexPatternSet for more information on using the CreateRegexPatternSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateRegexPatternSetRequest method.
//    req, resp := client.CreateRegexPatternSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRegexPatternSet
func (c *WAF) CreateRegexPatternSetRequest(input *CreateRegexPatternSetInput) (req *request.Request, output *CreateRegexPatternSetOutput) {
	op := &request.Operation{
		Name:       opCreateRegexPatternSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateRegexPatternSetInput{}
	}

	output = &CreateRegexPatternSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateRegexPatternSet API operation for AWS WAF.
//
// Creates a RegexPatternSet. You then use UpdateRegexPatternSet to specify
// the regular expression (regex) pattern that you want AWS WAF to search for,
// such as B[a@]dB[o0]t. You can then configure AWS WAF to reject those requests.
//
// To create and configure a RegexPatternSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateRegexPatternSet request.
//
// Submit a CreateRegexPatternSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRegexPatternSet request.
//
// Submit an UpdateRegexPatternSet request to specify the string that you want
// AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateRegexPatternSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRegexPatternSet
func (c *WAF) CreateRegexPatternSet(input *CreateRegexPatternSetInput) (*CreateRegexPatternSetOutput, error) {
	req, out := c.CreateRegexPatternSetRequest(input)
	return out, req.Send()
}

// CreateRegexPatternSetWithContext is the same as CreateRegexPatternSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateRegexPatternSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateRegexPatternSetWithContext(ctx aws.Context, input *CreateRegexPatternSetInput, opts ...request.Option) (*CreateRegexPatternSetOutput, error) {
	req, out := c.CreateRegexPatternSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateRule = "CreateRule"

// CreateRuleRequest generates a "aws/request.Request" representing the
// client's request for the CreateRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateRule for more information on using the CreateRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateRuleRequest method.
//    req, resp := client.CreateRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRule
func (c *WAF) CreateRuleRequest(input *CreateRuleInput) (req *request.Request, output *CreateRuleOutput) {
	op := &request.Operation{
		Name:       opCreateRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateRuleInput{}
	}

	output = &CreateRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateRule API operation for AWS WAF.
//
// Creates a Rule, which contains the IPSet objects, ByteMatchSet objects, and
// other predicates that identify the requests that you want to block. If you
// add more than one predicate to a Rule, a request must match all of the specifications
// to be allowed or blocked. For example, suppose that you add the following
// to a Rule:
//
//    * An IPSet that matches the IP address 192.0.2.44/32
//
//    * A ByteMatchSet that matches BadBot in the User-Agent header
//
// You then add the Rule to a WebACL and specify that you want to blocks requests
// that satisfy the Rule. For a request to be blocked, it must come from the
// IP address 192.0.2.44 and the User-Agent header in the request must contain
// the value BadBot.
//
// To create and configure a Rule, perform the following steps:
//
// Create and update the predicates that you want to include in the Rule. For
// more information, see CreateByteMatchSet, CreateIPSet, and CreateSqlInjectionMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateRule request.
//
// Submit a CreateRule request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRule request.
//
// Submit an UpdateRule request to specify the predicates that you want to include
// in the Rule.
//
// Create and update a WebACL that contains the Rule. For more information,
// see CreateWebACL.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRule
func (c *WAF) CreateRule(input *CreateRuleInput) (*CreateRuleOutput, error) {
	req, out := c.CreateRuleRequest(input)
	return out, req.Send()
}

// CreateRuleWithContext is the same as CreateRule with the addition of
// the ability to pass a context and additional request options.
//
// See CreateRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateRuleWithContext(ctx aws.Context, input *CreateRuleInput, opts ...request.Option) (*CreateRuleOutput, error) {
	req, out := c.CreateRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateRuleGroup = "CreateRuleGroup"

// CreateRuleGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateRuleGroup operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateRuleGroup for more information on using the CreateRuleGroup
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateRuleGroupRequest method.
//    req, resp := client.CreateRuleGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRuleGroup
func (c *WAF) CreateRuleGroupRequest(input *CreateRuleGroupInput) (req *request.Request, output *CreateRuleGroupOutput) {
	op := &request.Operation{
		Name:       opCreateRuleGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateRuleGroupInput{}
	}

	output = &CreateRuleGroupOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateRuleGroup API operation for AWS WAF.
//
// Creates a RuleGroup. A rule group is a collection of predefined rules that
// you add to a web ACL. You use UpdateRuleGroup to add rules to the rule group.
//
// Rule groups are subject to the following limits:
//
//    * Three rule groups per account. You can request an increase to this limit
//    by contacting customer support.
//
//    * One rule group per web ACL.
//
//    * Ten rules per rule group.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateRuleGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateRuleGroup
func (c *WAF) CreateRuleGroup(input *CreateRuleGroupInput) (*CreateRuleGroupOutput, error) {
	req, out := c.CreateRuleGroupRequest(input)
	return out, req.Send()
}

// CreateRuleGroupWithContext is the same as CreateRuleGroup with the addition of
// the ability to pass a context and additional request options.
//
// See CreateRuleGroup for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateRuleGroupWithContext(ctx aws.Context, input *CreateRuleGroupInput, opts ...request.Option) (*CreateRuleGroupOutput, error) {
	req, out := c.CreateRuleGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateSizeConstraintSet = "CreateSizeConstraintSet"

// CreateSizeConstraintSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateSizeConstraintSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateSizeConstraintSet for more information on using the CreateSizeConstraintSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateSizeConstraintSetRequest method.
//    req, resp := client.CreateSizeConstraintSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateSizeConstraintSet
func (c *WAF) CreateSizeConstraintSetRequest(input *CreateSizeConstraintSetInput) (req *request.Request, output *CreateSizeConstraintSetOutput) {
	op := &request.Operation{
		Name:       opCreateSizeConstraintSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateSizeConstraintSetInput{}
	}

	output = &CreateSizeConstraintSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateSizeConstraintSet API operation for AWS WAF.
//
// Creates a SizeConstraintSet. You then use UpdateSizeConstraintSet to identify
// the part of a web request that you want AWS WAF to check for length, such
// as the length of the User-Agent header or the length of the query string.
// For example, you can create a SizeConstraintSet that matches any requests
// that have a query string that is longer than 100 bytes. You can then configure
// AWS WAF to reject those requests.
//
// To create and configure a SizeConstraintSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateSizeConstraintSet request.
//
// Submit a CreateSizeConstraintSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateSizeConstraintSet request.
//
// Submit an UpdateSizeConstraintSet request to specify the part of the request
// that you want AWS WAF to inspect (for example, the header or the URI) and
// the value that you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateSizeConstraintSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateSizeConstraintSet
func (c *WAF) CreateSizeConstraintSet(input *CreateSizeConstraintSetInput) (*CreateSizeConstraintSetOutput, error) {
	req, out := c.CreateSizeConstraintSetRequest(input)
	return out, req.Send()
}

// CreateSizeConstraintSetWithContext is the same as CreateSizeConstraintSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateSizeConstraintSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateSizeConstraintSetWithContext(ctx aws.Context, input *CreateSizeConstraintSetInput, opts ...request.Option) (*CreateSizeConstraintSetOutput, error) {
	req, out := c.CreateSizeConstraintSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateSqlInjectionMatchSet = "CreateSqlInjectionMatchSet"

// CreateSqlInjectionMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateSqlInjectionMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateSqlInjectionMatchSet for more information on using the CreateSqlInjectionMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateSqlInjectionMatchSetRequest method.
//    req, resp := client.CreateSqlInjectionMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateSqlInjectionMatchSet
func (c *WAF) CreateSqlInjectionMatchSetRequest(input *CreateSqlInjectionMatchSetInput) (req *request.Request, output *CreateSqlInjectionMatchSetOutput) {
	op := &request.Operation{
		Name:       opCreateSqlInjectionMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateSqlInjectionMatchSetInput{}
	}

	output = &CreateSqlInjectionMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateSqlInjectionMatchSet API operation for AWS WAF.
//
// Creates a SqlInjectionMatchSet, which you use to allow, block, or count requests
// that contain snippets of SQL code in a specified part of web requests. AWS
// WAF searches for character sequences that are likely to be malicious strings.
//
// To create and configure a SqlInjectionMatchSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateSqlInjectionMatchSet request.
//
// Submit a CreateSqlInjectionMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateSqlInjectionMatchSet request.
//
// Submit an UpdateSqlInjectionMatchSet request to specify the parts of web
// requests in which you want to allow, block, or count malicious SQL code.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateSqlInjectionMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateSqlInjectionMatchSet
func (c *WAF) CreateSqlInjectionMatchSet(input *CreateSqlInjectionMatchSetInput) (*CreateSqlInjectionMatchSetOutput, error) {
	req, out := c.CreateSqlInjectionMatchSetRequest(input)
	return out, req.Send()
}

// CreateSqlInjectionMatchSetWithContext is the same as CreateSqlInjectionMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateSqlInjectionMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateSqlInjectionMatchSetWithContext(ctx aws.Context, input *CreateSqlInjectionMatchSetInput, opts ...request.Option) (*CreateSqlInjectionMatchSetOutput, error) {
	req, out := c.CreateSqlInjectionMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateWebACL = "CreateWebACL"

// CreateWebACLRequest generates a "aws/request.Request" representing the
// client's request for the CreateWebACL operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateWebACL for more information on using the CreateWebACL
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateWebACLRequest method.
//    req, resp := client.CreateWebACLRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateWebACL
func (c *WAF) CreateWebACLRequest(input *CreateWebACLInput) (req *request.Request, output *CreateWebACLOutput) {
	op := &request.Operation{
		Name:       opCreateWebACL,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateWebACLInput{}
	}

	output = &CreateWebACLOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateWebACL API operation for AWS WAF.
//
// Creates a WebACL, which contains the Rules that identify the CloudFront web
// requests that you want to allow, block, or count. AWS WAF evaluates Rules
// in order based on the value of Priority for each Rule.
//
// You also specify a default action, either ALLOW or BLOCK. If a web request
// doesn't match any of the Rules in a WebACL, AWS WAF responds to the request
// with the default action.
//
// To create and configure a WebACL, perform the following steps:
//
// Create and update the ByteMatchSet objects and other predicates that you
// want to include in Rules. For more information, see CreateByteMatchSet, UpdateByteMatchSet,
// CreateIPSet, UpdateIPSet, CreateSqlInjectionMatchSet, and UpdateSqlInjectionMatchSet.
//
// Create and update the Rules that you want to include in the WebACL. For more
// information, see CreateRule and UpdateRule.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateWebACL request.
//
// Submit a CreateWebACL request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateWebACL request.
//
// Submit an UpdateWebACL request to specify the Rules that you want to include
// in the WebACL, to specify the default action, and to associate the WebACL
// with a CloudFront distribution.
//
// For more information about how to use the AWS WAF API, see the AWS WAF Developer
// Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateWebACL for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateWebACL
func (c *WAF) CreateWebACL(input *CreateWebACLInput) (*CreateWebACLOutput, error) {
	req, out := c.CreateWebACLRequest(input)
	return out, req.Send()
}

// CreateWebACLWithContext is the same as CreateWebACL with the addition of
// the ability to pass a context and additional request options.
//
// See CreateWebACL for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateWebACLWithContext(ctx aws.Context, input *CreateWebACLInput, opts ...request.Option) (*CreateWebACLOutput, error) {
	req, out := c.CreateWebACLRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateXssMatchSet = "CreateXssMatchSet"

// CreateXssMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateXssMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateXssMatchSet for more information on using the CreateXssMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the CreateXssMatchSetRequest method.
//    req, resp := client.CreateXssMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateXssMatchSet
func (c *WAF) CreateXssMatchSetRequest(input *CreateXssMatchSetInput) (req *request.Request, output *CreateXssMatchSetOutput) {
	op := &request.Operation{
		Name:       opCreateXssMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateXssMatchSetInput{}
	}

	output = &CreateXssMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateXssMatchSet API operation for AWS WAF.
//
// Creates an XssMatchSet, which you use to allow, block, or count requests
// that contain cross-site scripting attacks in the specified part of web requests.
// AWS WAF searches for character sequences that are likely to be malicious
// strings.
//
// To create and configure an XssMatchSet, perform the following steps:
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a CreateXssMatchSet request.
//
// Submit a CreateXssMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateXssMatchSet request.
//
// Submit an UpdateXssMatchSet request to specify the parts of web requests
// in which you want to allow, block, or count cross-site scripting attacks.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation CreateXssMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/CreateXssMatchSet
func (c *WAF) CreateXssMatchSet(input *CreateXssMatchSetInput) (*CreateXssMatchSetOutput, error) {
	req, out := c.CreateXssMatchSetRequest(input)
	return out, req.Send()
}

// CreateXssMatchSetWithContext is the same as CreateXssMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateXssMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) CreateXssMatchSetWithContext(ctx aws.Context, input *CreateXssMatchSetInput, opts ...request.Option) (*CreateXssMatchSetOutput, error) {
	req, out := c.CreateXssMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteByteMatchSet = "DeleteByteMatchSet"

// DeleteByteMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteByteMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteByteMatchSet for more information on using the DeleteByteMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteByteMatchSetRequest method.
//    req, resp := client.DeleteByteMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteByteMatchSet
func (c *WAF) DeleteByteMatchSetRequest(input *DeleteByteMatchSetInput) (req *request.Request, output *DeleteByteMatchSetOutput) {
	op := &request.Operation{
		Name:       opDeleteByteMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteByteMatchSetInput{}
	}

	output = &DeleteByteMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteByteMatchSet API operation for AWS WAF.
//
// Permanently deletes a ByteMatchSet. You can't delete a ByteMatchSet if it's
// still used in any Rules or if it still includes any ByteMatchTuple objects
// (any filters).
//
// If you just want to remove a ByteMatchSet from a Rule, use UpdateRule.
//
// To permanently delete a ByteMatchSet, perform the following steps:
//
// Update the ByteMatchSet to remove filters, if any. For more information,
// see UpdateByteMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteByteMatchSet request.
//
// Submit a DeleteByteMatchSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteByteMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteByteMatchSet
func (c *WAF) DeleteByteMatchSet(input *DeleteByteMatchSetInput) (*DeleteByteMatchSetOutput, error) {
	req, out := c.DeleteByteMatchSetRequest(input)
	return out, req.Send()
}

// DeleteByteMatchSetWithContext is the same as DeleteByteMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteByteMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteByteMatchSetWithContext(ctx aws.Context, input *DeleteByteMatchSetInput, opts ...request.Option) (*DeleteByteMatchSetOutput, error) {
	req, out := c.DeleteByteMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteGeoMatchSet = "DeleteGeoMatchSet"

// DeleteGeoMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteGeoMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteGeoMatchSet for more information on using the DeleteGeoMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteGeoMatchSetRequest method.
//    req, resp := client.DeleteGeoMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteGeoMatchSet
func (c *WAF) DeleteGeoMatchSetRequest(input *DeleteGeoMatchSetInput) (req *request.Request, output *DeleteGeoMatchSetOutput) {
	op := &request.Operation{
		Name:       opDeleteGeoMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteGeoMatchSetInput{}
	}

	output = &DeleteGeoMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteGeoMatchSet API operation for AWS WAF.
//
// Permanently deletes a GeoMatchSet. You can't delete a GeoMatchSet if it's
// still used in any Rules or if it still includes any countries.
//
// If you just want to remove a GeoMatchSet from a Rule, use UpdateRule.
//
// To permanently delete a GeoMatchSet from AWS WAF, perform the following steps:
//
// Update the GeoMatchSet to remove any countries. For more information, see
// UpdateGeoMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteGeoMatchSet request.
//
// Submit a DeleteGeoMatchSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteGeoMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteGeoMatchSet
func (c *WAF) DeleteGeoMatchSet(input *DeleteGeoMatchSetInput) (*DeleteGeoMatchSetOutput, error) {
	req, out := c.DeleteGeoMatchSetRequest(input)
	return out, req.Send()
}

// DeleteGeoMatchSetWithContext is the same as DeleteGeoMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteGeoMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteGeoMatchSetWithContext(ctx aws.Context, input *DeleteGeoMatchSetInput, opts ...request.Option) (*DeleteGeoMatchSetOutput, error) {
	req, out := c.DeleteGeoMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteIPSet = "DeleteIPSet"

// DeleteIPSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteIPSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteIPSet for more information on using the DeleteIPSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteIPSetRequest method.
//    req, resp := client.DeleteIPSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteIPSet
func (c *WAF) DeleteIPSetRequest(input *DeleteIPSetInput) (req *request.Request, output *DeleteIPSetOutput) {
	op := &request.Operation{
		Name:       opDeleteIPSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteIPSetInput{}
	}

	output = &DeleteIPSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteIPSet API operation for AWS WAF.
//
// Permanently deletes an IPSet. You can't delete an IPSet if it's still used
// in any Rules or if it still includes any IP addresses.
//
// If you just want to remove an IPSet from a Rule, use UpdateRule.
//
// To permanently delete an IPSet from AWS WAF, perform the following steps:
//
// Update the IPSet to remove IP address ranges, if any. For more information,
// see UpdateIPSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteIPSet request.
//
// Submit a DeleteIPSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteIPSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteIPSet
func (c *WAF) DeleteIPSet(input *DeleteIPSetInput) (*DeleteIPSetOutput, error) {
	req, out := c.DeleteIPSetRequest(input)
	return out, req.Send()
}

// DeleteIPSetWithContext is the same as DeleteIPSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteIPSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteIPSetWithContext(ctx aws.Context, input *DeleteIPSetInput, opts ...request.Option) (*DeleteIPSetOutput, error) {
	req, out := c.DeleteIPSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteLoggingConfiguration = "DeleteLoggingConfiguration"

// DeleteLoggingConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteLoggingConfiguration operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteLoggingConfiguration for more information on using the DeleteLoggingConfiguration
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteLoggingConfigurationRequest method.
//    req, resp := client.DeleteLoggingConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteLoggingConfiguration
func (c *WAF) DeleteLoggingConfigurationRequest(input *DeleteLoggingConfigurationInput) (req *request.Request, output *DeleteLoggingConfigurationOutput) {
	op := &request.Operation{
		Name:       opDeleteLoggingConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteLoggingConfigurationInput{}
	}

	output = &DeleteLoggingConfigurationOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeleteLoggingConfiguration API operation for AWS WAF.
//
// Permanently deletes the LoggingConfiguration from the specified web ACL.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteLoggingConfiguration for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteLoggingConfiguration
func (c *WAF) DeleteLoggingConfiguration(input *DeleteLoggingConfigurationInput) (*DeleteLoggingConfigurationOutput, error) {
	req, out := c.DeleteLoggingConfigurationRequest(input)
	return out, req.Send()
}

// DeleteLoggingConfigurationWithContext is the same as DeleteLoggingConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteLoggingConfiguration for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteLoggingConfigurationWithContext(ctx aws.Context, input *DeleteLoggingConfigurationInput, opts ...request.Option) (*DeleteLoggingConfigurationOutput, error) {
	req, out := c.DeleteLoggingConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeletePermissionPolicy = "DeletePermissionPolicy"

// DeletePermissionPolicyRequest generates a "aws/request.Request" representing the
// client's request for the DeletePermissionPolicy operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeletePermissionPolicy for more information on using the DeletePermissionPolicy
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeletePermissionPolicyRequest method.
//    req, resp := client.DeletePermissionPolicyRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeletePermissionPolicy
func (c *WAF) DeletePermissionPolicyRequest(input *DeletePermissionPolicyInput) (req *request.Request, output *DeletePermissionPolicyOutput) {
	op := &request.Operation{
		Name:       opDeletePermissionPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeletePermissionPolicyInput{}
	}

	output = &DeletePermissionPolicyOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeletePermissionPolicy API operation for AWS WAF.
//
// Permanently deletes an IAM policy from the specified RuleGroup.
//
// The user making the request must be the owner of the RuleGroup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeletePermissionPolicy for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeletePermissionPolicy
func (c *WAF) DeletePermissionPolicy(input *DeletePermissionPolicyInput) (*DeletePermissionPolicyOutput, error) {
	req, out := c.DeletePermissionPolicyRequest(input)
	return out, req.Send()
}

// DeletePermissionPolicyWithContext is the same as DeletePermissionPolicy with the addition of
// the ability to pass a context and additional request options.
//
// See DeletePermissionPolicy for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeletePermissionPolicyWithContext(ctx aws.Context, input *DeletePermissionPolicyInput, opts ...request.Option) (*DeletePermissionPolicyOutput, error) {
	req, out := c.DeletePermissionPolicyRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteRateBasedRule = "DeleteRateBasedRule"

// DeleteRateBasedRuleRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRateBasedRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteRateBasedRule for more information on using the DeleteRateBasedRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteRateBasedRuleRequest method.
//    req, resp := client.DeleteRateBasedRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRateBasedRule
func (c *WAF) DeleteRateBasedRuleRequest(input *DeleteRateBasedRuleInput) (req *request.Request, output *DeleteRateBasedRuleOutput) {
	op := &request.Operation{
		Name:       opDeleteRateBasedRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteRateBasedRuleInput{}
	}

	output = &DeleteRateBasedRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteRateBasedRule API operation for AWS WAF.
//
// Permanently deletes a RateBasedRule. You can't delete a rule if it's still
// used in any WebACL objects or if it still includes any predicates, such as
// ByteMatchSet objects.
//
// If you just want to remove a rule from a WebACL, use UpdateWebACL.
//
// To permanently delete a RateBasedRule from AWS WAF, perform the following
// steps:
//
// Update the RateBasedRule to remove predicates, if any. For more information,
// see UpdateRateBasedRule.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteRateBasedRule request.
//
// Submit a DeleteRateBasedRule request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteRateBasedRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRateBasedRule
func (c *WAF) DeleteRateBasedRule(input *DeleteRateBasedRuleInput) (*DeleteRateBasedRuleOutput, error) {
	req, out := c.DeleteRateBasedRuleRequest(input)
	return out, req.Send()
}

// DeleteRateBasedRuleWithContext is the same as DeleteRateBasedRule with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRateBasedRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteRateBasedRuleWithContext(ctx aws.Context, input *DeleteRateBasedRuleInput, opts ...request.Option) (*DeleteRateBasedRuleOutput, error) {
	req, out := c.DeleteRateBasedRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteRegexMatchSet = "DeleteRegexMatchSet"

// DeleteRegexMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRegexMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteRegexMatchSet for more information on using the DeleteRegexMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteRegexMatchSetRequest method.
//    req, resp := client.DeleteRegexMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRegexMatchSet
func (c *WAF) DeleteRegexMatchSetRequest(input *DeleteRegexMatchSetInput) (req *request.Request, output *DeleteRegexMatchSetOutput) {
	op := &request.Operation{
		Name:       opDeleteRegexMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteRegexMatchSetInput{}
	}

	output = &DeleteRegexMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteRegexMatchSet API operation for AWS WAF.
//
// Permanently deletes a RegexMatchSet. You can't delete a RegexMatchSet if
// it's still used in any Rules or if it still includes any RegexMatchTuples
// objects (any filters).
//
// If you just want to remove a RegexMatchSet from a Rule, use UpdateRule.
//
// To permanently delete a RegexMatchSet, perform the following steps:
//
// Update the RegexMatchSet to remove filters, if any. For more information,
// see UpdateRegexMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteRegexMatchSet request.
//
// Submit a DeleteRegexMatchSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteRegexMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRegexMatchSet
func (c *WAF) DeleteRegexMatchSet(input *DeleteRegexMatchSetInput) (*DeleteRegexMatchSetOutput, error) {
	req, out := c.DeleteRegexMatchSetRequest(input)
	return out, req.Send()
}

// DeleteRegexMatchSetWithContext is the same as DeleteRegexMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRegexMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteRegexMatchSetWithContext(ctx aws.Context, input *DeleteRegexMatchSetInput, opts ...request.Option) (*DeleteRegexMatchSetOutput, error) {
	req, out := c.DeleteRegexMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteRegexPatternSet = "DeleteRegexPatternSet"

// DeleteRegexPatternSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRegexPatternSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteRegexPatternSet for more information on using the DeleteRegexPatternSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteRegexPatternSetRequest method.
//    req, resp := client.DeleteRegexPatternSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRegexPatternSet
func (c *WAF) DeleteRegexPatternSetRequest(input *DeleteRegexPatternSetInput) (req *request.Request, output *DeleteRegexPatternSetOutput) {
	op := &request.Operation{
		Name:       opDeleteRegexPatternSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteRegexPatternSetInput{}
	}

	output = &DeleteRegexPatternSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteRegexPatternSet API operation for AWS WAF.
//
// Permanently deletes a RegexPatternSet. You can't delete a RegexPatternSet
// if it's still used in any RegexMatchSet or if the RegexPatternSet is not
// empty.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteRegexPatternSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRegexPatternSet
func (c *WAF) DeleteRegexPatternSet(input *DeleteRegexPatternSetInput) (*DeleteRegexPatternSetOutput, error) {
	req, out := c.DeleteRegexPatternSetRequest(input)
	return out, req.Send()
}

// DeleteRegexPatternSetWithContext is the same as DeleteRegexPatternSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRegexPatternSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteRegexPatternSetWithContext(ctx aws.Context, input *DeleteRegexPatternSetInput, opts ...request.Option) (*DeleteRegexPatternSetOutput, error) {
	req, out := c.DeleteRegexPatternSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteRule = "DeleteRule"

// DeleteRuleRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteRule for more information on using the DeleteRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteRuleRequest method.
//    req, resp := client.DeleteRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRule
func (c *WAF) DeleteRuleRequest(input *DeleteRuleInput) (req *request.Request, output *DeleteRuleOutput) {
	op := &request.Operation{
		Name:       opDeleteRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteRuleInput{}
	}

	output = &DeleteRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteRule API operation for AWS WAF.
//
// Permanently deletes a Rule. You can't delete a Rule if it's still used in
// any WebACL objects or if it still includes any predicates, such as ByteMatchSet
// objects.
//
// If you just want to remove a Rule from a WebACL, use UpdateWebACL.
//
// To permanently delete a Rule from AWS WAF, perform the following steps:
//
// Update the Rule to remove predicates, if any. For more information, see UpdateRule.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteRule request.
//
// Submit a DeleteRule request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRule
func (c *WAF) DeleteRule(input *DeleteRuleInput) (*DeleteRuleOutput, error) {
	req, out := c.DeleteRuleRequest(input)
	return out, req.Send()
}

// DeleteRuleWithContext is the same as DeleteRule with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteRuleWithContext(ctx aws.Context, input *DeleteRuleInput, opts ...request.Option) (*DeleteRuleOutput, error) {
	req, out := c.DeleteRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteRuleGroup = "DeleteRuleGroup"

// DeleteRuleGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRuleGroup operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteRuleGroup for more information on using the DeleteRuleGroup
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteRuleGroupRequest method.
//    req, resp := client.DeleteRuleGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRuleGroup
func (c *WAF) DeleteRuleGroupRequest(input *DeleteRuleGroupInput) (req *request.Request, output *DeleteRuleGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteRuleGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteRuleGroupInput{}
	}

	output = &DeleteRuleGroupOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteRuleGroup API operation for AWS WAF.
//
// Permanently deletes a RuleGroup. You can't delete a RuleGroup if it's still
// used in any WebACL objects or if it still includes any rules.
//
// If you just want to remove a RuleGroup from a WebACL, use UpdateWebACL.
//
// To permanently delete a RuleGroup from AWS WAF, perform the following steps:
//
// Update the RuleGroup to remove rules, if any. For more information, see UpdateRuleGroup.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteRuleGroup request.
//
// Submit a DeleteRuleGroup request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteRuleGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRuleGroup
func (c *WAF) DeleteRuleGroup(input *DeleteRuleGroupInput) (*DeleteRuleGroupOutput, error) {
	req, out := c.DeleteRuleGroupRequest(input)
	return out, req.Send()
}

// DeleteRuleGroupWithContext is the same as DeleteRuleGroup with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRuleGroup for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteRuleGroupWithContext(ctx aws.Context, input *DeleteRuleGroupInput, opts ...request.Option) (*DeleteRuleGroupOutput, error) {
	req, out := c.DeleteRuleGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteSizeConstraintSet = "DeleteSizeConstraintSet"

// DeleteSizeConstraintSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSizeConstraintSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteSizeConstraintSet for more information on using the DeleteSizeConstraintSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteSizeConstraintSetRequest method.
//    req, resp := client.DeleteSizeConstraintSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteSizeConstraintSet
func (c *WAF) DeleteSizeConstraintSetRequest(input *DeleteSizeConstraintSetInput) (req *request.Request, output *DeleteSizeConstraintSetOutput) {
	op := &request.Operation{
		Name:       opDeleteSizeConstraintSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteSizeConstraintSetInput{}
	}

	output = &DeleteSizeConstraintSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteSizeConstraintSet API operation for AWS WAF.
//
// Permanently deletes a SizeConstraintSet. You can't delete a SizeConstraintSet
// if it's still used in any Rules or if it still includes any SizeConstraint
// objects (any filters).
//
// If you just want to remove a SizeConstraintSet from a Rule, use UpdateRule.
//
// To permanently delete a SizeConstraintSet, perform the following steps:
//
// Update the SizeConstraintSet to remove filters, if any. For more information,
// see UpdateSizeConstraintSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteSizeConstraintSet request.
//
// Submit a DeleteSizeConstraintSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteSizeConstraintSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteSizeConstraintSet
func (c *WAF) DeleteSizeConstraintSet(input *DeleteSizeConstraintSetInput) (*DeleteSizeConstraintSetOutput, error) {
	req, out := c.DeleteSizeConstraintSetRequest(input)
	return out, req.Send()
}

// DeleteSizeConstraintSetWithContext is the same as DeleteSizeConstraintSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteSizeConstraintSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteSizeConstraintSetWithContext(ctx aws.Context, input *DeleteSizeConstraintSetInput, opts ...request.Option) (*DeleteSizeConstraintSetOutput, error) {
	req, out := c.DeleteSizeConstraintSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteSqlInjectionMatchSet = "DeleteSqlInjectionMatchSet"

// DeleteSqlInjectionMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSqlInjectionMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteSqlInjectionMatchSet for more information on using the DeleteSqlInjectionMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteSqlInjectionMatchSetRequest method.
//    req, resp := client.DeleteSqlInjectionMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteSqlInjectionMatchSet
func (c *WAF) DeleteSqlInjectionMatchSetRequest(input *DeleteSqlInjectionMatchSetInput) (req *request.Request, output *DeleteSqlInjectionMatchSetOutput) {
	op := &request.Operation{
		Name:       opDeleteSqlInjectionMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteSqlInjectionMatchSetInput{}
	}

	output = &DeleteSqlInjectionMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteSqlInjectionMatchSet API operation for AWS WAF.
//
// Permanently deletes a SqlInjectionMatchSet. You can't delete a SqlInjectionMatchSet
// if it's still used in any Rules or if it still contains any SqlInjectionMatchTuple
// objects.
//
// If you just want to remove a SqlInjectionMatchSet from a Rule, use UpdateRule.
//
// To permanently delete a SqlInjectionMatchSet from AWS WAF, perform the following
// steps:
//
// Update the SqlInjectionMatchSet to remove filters, if any. For more information,
// see UpdateSqlInjectionMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteSqlInjectionMatchSet request.
//
// Submit a DeleteSqlInjectionMatchSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteSqlInjectionMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteSqlInjectionMatchSet
func (c *WAF) DeleteSqlInjectionMatchSet(input *DeleteSqlInjectionMatchSetInput) (*DeleteSqlInjectionMatchSetOutput, error) {
	req, out := c.DeleteSqlInjectionMatchSetRequest(input)
	return out, req.Send()
}

// DeleteSqlInjectionMatchSetWithContext is the same as DeleteSqlInjectionMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteSqlInjectionMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteSqlInjectionMatchSetWithContext(ctx aws.Context, input *DeleteSqlInjectionMatchSetInput, opts ...request.Option) (*DeleteSqlInjectionMatchSetOutput, error) {
	req, out := c.DeleteSqlInjectionMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteWebACL = "DeleteWebACL"

// DeleteWebACLRequest generates a "aws/request.Request" representing the
// client's request for the DeleteWebACL operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteWebACL for more information on using the DeleteWebACL
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteWebACLRequest method.
//    req, resp := client.DeleteWebACLRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteWebACL
func (c *WAF) DeleteWebACLRequest(input *DeleteWebACLInput) (req *request.Request, output *DeleteWebACLOutput) {
	op := &request.Operation{
		Name:       opDeleteWebACL,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteWebACLInput{}
	}

	output = &DeleteWebACLOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteWebACL API operation for AWS WAF.
//
// Permanently deletes a WebACL. You can't delete a WebACL if it still contains
// any Rules.
//
// To delete a WebACL, perform the following steps:
//
// Update the WebACL to remove Rules, if any. For more information, see UpdateWebACL.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteWebACL request.
//
// Submit a DeleteWebACL request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteWebACL for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteWebACL
func (c *WAF) DeleteWebACL(input *DeleteWebACLInput) (*DeleteWebACLOutput, error) {
	req, out := c.DeleteWebACLRequest(input)
	return out, req.Send()
}

// DeleteWebACLWithContext is the same as DeleteWebACL with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteWebACL for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteWebACLWithContext(ctx aws.Context, input *DeleteWebACLInput, opts ...request.Option) (*DeleteWebACLOutput, error) {
	req, out := c.DeleteWebACLRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteXssMatchSet = "DeleteXssMatchSet"

// DeleteXssMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteXssMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteXssMatchSet for more information on using the DeleteXssMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the DeleteXssMatchSetRequest method.
//    req, resp := client.DeleteXssMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteXssMatchSet
func (c *WAF) DeleteXssMatchSetRequest(input *DeleteXssMatchSetInput) (req *request.Request, output *DeleteXssMatchSetOutput) {
	op := &request.Operation{
		Name:       opDeleteXssMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteXssMatchSetInput{}
	}

	output = &DeleteXssMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteXssMatchSet API operation for AWS WAF.
//
// Permanently deletes an XssMatchSet. You can't delete an XssMatchSet if it's
// still used in any Rules or if it still contains any XssMatchTuple objects.
//
// If you just want to remove an XssMatchSet from a Rule, use UpdateRule.
//
// To permanently delete an XssMatchSet from AWS WAF, perform the following
// steps:
//
// Update the XssMatchSet to remove filters, if any. For more information, see
// UpdateXssMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of a DeleteXssMatchSet request.
//
// Submit a DeleteXssMatchSet request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation DeleteXssMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonEmptyEntityException "WAFNonEmptyEntityException"
//   The operation failed because you tried to delete an object that isn't empty.
//   For example:
//
//      * You tried to delete a WebACL that still contains one or more Rule objects.
//
//      * You tried to delete a Rule that still contains one or more ByteMatchSet
//      objects or other predicates.
//
//      * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
//      objects.
//
//      * You tried to delete an IPSet that references one or more IP addresses.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteXssMatchSet
func (c *WAF) DeleteXssMatchSet(input *DeleteXssMatchSetInput) (*DeleteXssMatchSetOutput, error) {
	req, out := c.DeleteXssMatchSetRequest(input)
	return out, req.Send()
}

// DeleteXssMatchSetWithContext is the same as DeleteXssMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteXssMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) DeleteXssMatchSetWithContext(ctx aws.Context, input *DeleteXssMatchSetInput, opts ...request.Option) (*DeleteXssMatchSetOutput, error) {
	req, out := c.DeleteXssMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetByteMatchSet = "GetByteMatchSet"

// GetByteMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the GetByteMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetByteMatchSet for more information on using the GetByteMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetByteMatchSetRequest method.
//    req, resp := client.GetByteMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetByteMatchSet
func (c *WAF) GetByteMatchSetRequest(input *GetByteMatchSetInput) (req *request.Request, output *GetByteMatchSetOutput) {
	op := &request.Operation{
		Name:       opGetByteMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetByteMatchSetInput{}
	}

	output = &GetByteMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetByteMatchSet API operation for AWS WAF.
//
// Returns the ByteMatchSet specified by ByteMatchSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetByteMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetByteMatchSet
func (c *WAF) GetByteMatchSet(input *GetByteMatchSetInput) (*GetByteMatchSetOutput, error) {
	req, out := c.GetByteMatchSetRequest(input)
	return out, req.Send()
}

// GetByteMatchSetWithContext is the same as GetByteMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetByteMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetByteMatchSetWithContext(ctx aws.Context, input *GetByteMatchSetInput, opts ...request.Option) (*GetByteMatchSetOutput, error) {
	req, out := c.GetByteMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetChangeToken = "GetChangeToken"

// GetChangeTokenRequest generates a "aws/request.Request" representing the
// client's request for the GetChangeToken operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetChangeToken for more information on using the GetChangeToken
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetChangeTokenRequest method.
//    req, resp := client.GetChangeTokenRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetChangeToken
func (c *WAF) GetChangeTokenRequest(input *GetChangeTokenInput) (req *request.Request, output *GetChangeTokenOutput) {
	op := &request.Operation{
		Name:       opGetChangeToken,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetChangeTokenInput{}
	}

	output = &GetChangeTokenOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetChangeToken API operation for AWS WAF.
//
// When you want to create, update, or delete AWS WAF objects, get a change
// token and include the change token in the create, update, or delete request.
// Change tokens ensure that your application doesn't submit conflicting requests
// to AWS WAF.
//
// Each create, update, or delete request must use a unique change token. If
// your application submits a GetChangeToken request and then submits a second
// GetChangeToken request before submitting a create, update, or delete request,
// the second GetChangeToken request returns the same value as the first GetChangeToken
// request.
//
// When you use a change token in a create, update, or delete request, the status
// of the change token changes to PENDING, which indicates that AWS WAF is propagating
// the change to all AWS WAF servers. Use GetChangeTokenStatus to determine
// the status of your change token.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetChangeToken for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetChangeToken
func (c *WAF) GetChangeToken(input *GetChangeTokenInput) (*GetChangeTokenOutput, error) {
	req, out := c.GetChangeTokenRequest(input)
	return out, req.Send()
}

// GetChangeTokenWithContext is the same as GetChangeToken with the addition of
// the ability to pass a context and additional request options.
//
// See GetChangeToken for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetChangeTokenWithContext(ctx aws.Context, input *GetChangeTokenInput, opts ...request.Option) (*GetChangeTokenOutput, error) {
	req, out := c.GetChangeTokenRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetChangeTokenStatus = "GetChangeTokenStatus"

// GetChangeTokenStatusRequest generates a "aws/request.Request" representing the
// client's request for the GetChangeTokenStatus operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetChangeTokenStatus for more information on using the GetChangeTokenStatus
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetChangeTokenStatusRequest method.
//    req, resp := client.GetChangeTokenStatusRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetChangeTokenStatus
func (c *WAF) GetChangeTokenStatusRequest(input *GetChangeTokenStatusInput) (req *request.Request, output *GetChangeTokenStatusOutput) {
	op := &request.Operation{
		Name:       opGetChangeTokenStatus,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetChangeTokenStatusInput{}
	}

	output = &GetChangeTokenStatusOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetChangeTokenStatus API operation for AWS WAF.
//
// Returns the status of a ChangeToken that you got by calling GetChangeToken.
// ChangeTokenStatus is one of the following values:
//
//    * PROVISIONED: You requested the change token by calling GetChangeToken,
//    but you haven't used it yet in a call to create, update, or delete an
//    AWS WAF object.
//
//    * PENDING: AWS WAF is propagating the create, update, or delete request
//    to all AWS WAF servers.
//
//    * INSYNC: Propagation is complete.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetChangeTokenStatus for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetChangeTokenStatus
func (c *WAF) GetChangeTokenStatus(input *GetChangeTokenStatusInput) (*GetChangeTokenStatusOutput, error) {
	req, out := c.GetChangeTokenStatusRequest(input)
	return out, req.Send()
}

// GetChangeTokenStatusWithContext is the same as GetChangeTokenStatus with the addition of
// the ability to pass a context and additional request options.
//
// See GetChangeTokenStatus for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetChangeTokenStatusWithContext(ctx aws.Context, input *GetChangeTokenStatusInput, opts ...request.Option) (*GetChangeTokenStatusOutput, error) {
	req, out := c.GetChangeTokenStatusRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetGeoMatchSet = "GetGeoMatchSet"

// GetGeoMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the GetGeoMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetGeoMatchSet for more information on using the GetGeoMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetGeoMatchSetRequest method.
//    req, resp := client.GetGeoMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetGeoMatchSet
func (c *WAF) GetGeoMatchSetRequest(input *GetGeoMatchSetInput) (req *request.Request, output *GetGeoMatchSetOutput) {
	op := &request.Operation{
		Name:       opGetGeoMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetGeoMatchSetInput{}
	}

	output = &GetGeoMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetGeoMatchSet API operation for AWS WAF.
//
// Returns the GeoMatchSet that is specified by GeoMatchSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetGeoMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetGeoMatchSet
func (c *WAF) GetGeoMatchSet(input *GetGeoMatchSetInput) (*GetGeoMatchSetOutput, error) {
	req, out := c.GetGeoMatchSetRequest(input)
	return out, req.Send()
}

// GetGeoMatchSetWithContext is the same as GetGeoMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetGeoMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetGeoMatchSetWithContext(ctx aws.Context, input *GetGeoMatchSetInput, opts ...request.Option) (*GetGeoMatchSetOutput, error) {
	req, out := c.GetGeoMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetIPSet = "GetIPSet"

// GetIPSetRequest generates a "aws/request.Request" representing the
// client's request for the GetIPSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetIPSet for more information on using the GetIPSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetIPSetRequest method.
//    req, resp := client.GetIPSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetIPSet
func (c *WAF) GetIPSetRequest(input *GetIPSetInput) (req *request.Request, output *GetIPSetOutput) {
	op := &request.Operation{
		Name:       opGetIPSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetIPSetInput{}
	}

	output = &GetIPSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetIPSet API operation for AWS WAF.
//
// Returns the IPSet that is specified by IPSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetIPSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetIPSet
func (c *WAF) GetIPSet(input *GetIPSetInput) (*GetIPSetOutput, error) {
	req, out := c.GetIPSetRequest(input)
	return out, req.Send()
}

// GetIPSetWithContext is the same as GetIPSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetIPSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetIPSetWithContext(ctx aws.Context, input *GetIPSetInput, opts ...request.Option) (*GetIPSetOutput, error) {
	req, out := c.GetIPSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetLoggingConfiguration = "GetLoggingConfiguration"

// GetLoggingConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetLoggingConfiguration operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetLoggingConfiguration for more information on using the GetLoggingConfiguration
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetLoggingConfigurationRequest method.
//    req, resp := client.GetLoggingConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetLoggingConfiguration
func (c *WAF) GetLoggingConfigurationRequest(input *GetLoggingConfigurationInput) (req *request.Request, output *GetLoggingConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetLoggingConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetLoggingConfigurationInput{}
	}

	output = &GetLoggingConfigurationOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetLoggingConfiguration API operation for AWS WAF.
//
// Returns the LoggingConfiguration for the specified web ACL.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetLoggingConfiguration for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetLoggingConfiguration
func (c *WAF) GetLoggingConfiguration(input *GetLoggingConfigurationInput) (*GetLoggingConfigurationOutput, error) {
	req, out := c.GetLoggingConfigurationRequest(input)
	return out, req.Send()
}

// GetLoggingConfigurationWithContext is the same as GetLoggingConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See GetLoggingConfiguration for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetLoggingConfigurationWithContext(ctx aws.Context, input *GetLoggingConfigurationInput, opts ...request.Option) (*GetLoggingConfigurationOutput, error) {
	req, out := c.GetLoggingConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetPermissionPolicy = "GetPermissionPolicy"

// GetPermissionPolicyRequest generates a "aws/request.Request" representing the
// client's request for the GetPermissionPolicy operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetPermissionPolicy for more information on using the GetPermissionPolicy
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetPermissionPolicyRequest method.
//    req, resp := client.GetPermissionPolicyRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetPermissionPolicy
func (c *WAF) GetPermissionPolicyRequest(input *GetPermissionPolicyInput) (req *request.Request, output *GetPermissionPolicyOutput) {
	op := &request.Operation{
		Name:       opGetPermissionPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetPermissionPolicyInput{}
	}

	output = &GetPermissionPolicyOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetPermissionPolicy API operation for AWS WAF.
//
// Returns the IAM policy attached to the RuleGroup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetPermissionPolicy for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetPermissionPolicy
func (c *WAF) GetPermissionPolicy(input *GetPermissionPolicyInput) (*GetPermissionPolicyOutput, error) {
	req, out := c.GetPermissionPolicyRequest(input)
	return out, req.Send()
}

// GetPermissionPolicyWithContext is the same as GetPermissionPolicy with the addition of
// the ability to pass a context and additional request options.
//
// See GetPermissionPolicy for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetPermissionPolicyWithContext(ctx aws.Context, input *GetPermissionPolicyInput, opts ...request.Option) (*GetPermissionPolicyOutput, error) {
	req, out := c.GetPermissionPolicyRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetRateBasedRule = "GetRateBasedRule"

// GetRateBasedRuleRequest generates a "aws/request.Request" representing the
// client's request for the GetRateBasedRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRateBasedRule for more information on using the GetRateBasedRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRateBasedRuleRequest method.
//    req, resp := client.GetRateBasedRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRateBasedRule
func (c *WAF) GetRateBasedRuleRequest(input *GetRateBasedRuleInput) (req *request.Request, output *GetRateBasedRuleOutput) {
	op := &request.Operation{
		Name:       opGetRateBasedRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetRateBasedRuleInput{}
	}

	output = &GetRateBasedRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetRateBasedRule API operation for AWS WAF.
//
// Returns the RateBasedRule that is specified by the RuleId that you included
// in the GetRateBasedRule request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetRateBasedRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRateBasedRule
func (c *WAF) GetRateBasedRule(input *GetRateBasedRuleInput) (*GetRateBasedRuleOutput, error) {
	req, out := c.GetRateBasedRuleRequest(input)
	return out, req.Send()
}

// GetRateBasedRuleWithContext is the same as GetRateBasedRule with the addition of
// the ability to pass a context and additional request options.
//
// See GetRateBasedRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetRateBasedRuleWithContext(ctx aws.Context, input *GetRateBasedRuleInput, opts ...request.Option) (*GetRateBasedRuleOutput, error) {
	req, out := c.GetRateBasedRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetRateBasedRuleManagedKeys = "GetRateBasedRuleManagedKeys"

// GetRateBasedRuleManagedKeysRequest generates a "aws/request.Request" representing the
// client's request for the GetRateBasedRuleManagedKeys operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRateBasedRuleManagedKeys for more information on using the GetRateBasedRuleManagedKeys
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRateBasedRuleManagedKeysRequest method.
//    req, resp := client.GetRateBasedRuleManagedKeysRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRateBasedRuleManagedKeys
func (c *WAF) GetRateBasedRuleManagedKeysRequest(input *GetRateBasedRuleManagedKeysInput) (req *request.Request, output *GetRateBasedRuleManagedKeysOutput) {
	op := &request.Operation{
		Name:       opGetRateBasedRuleManagedKeys,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetRateBasedRuleManagedKeysInput{}
	}

	output = &GetRateBasedRuleManagedKeysOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetRateBasedRuleManagedKeys API operation for AWS WAF.
//
// Returns an array of IP addresses currently being blocked by the RateBasedRule
// that is specified by the RuleId. The maximum number of managed keys that
// will be blocked is 10,000. If more than 10,000 addresses exceed the rate
// limit, the 10,000 addresses with the highest rates will be blocked.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetRateBasedRuleManagedKeys for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRateBasedRuleManagedKeys
func (c *WAF) GetRateBasedRuleManagedKeys(input *GetRateBasedRuleManagedKeysInput) (*GetRateBasedRuleManagedKeysOutput, error) {
	req, out := c.GetRateBasedRuleManagedKeysRequest(input)
	return out, req.Send()
}

// GetRateBasedRuleManagedKeysWithContext is the same as GetRateBasedRuleManagedKeys with the addition of
// the ability to pass a context and additional request options.
//
// See GetRateBasedRuleManagedKeys for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetRateBasedRuleManagedKeysWithContext(ctx aws.Context, input *GetRateBasedRuleManagedKeysInput, opts ...request.Option) (*GetRateBasedRuleManagedKeysOutput, error) {
	req, out := c.GetRateBasedRuleManagedKeysRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetRegexMatchSet = "GetRegexMatchSet"

// GetRegexMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the GetRegexMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRegexMatchSet for more information on using the GetRegexMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRegexMatchSetRequest method.
//    req, resp := client.GetRegexMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRegexMatchSet
func (c *WAF) GetRegexMatchSetRequest(input *GetRegexMatchSetInput) (req *request.Request, output *GetRegexMatchSetOutput) {
	op := &request.Operation{
		Name:       opGetRegexMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetRegexMatchSetInput{}
	}

	output = &GetRegexMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetRegexMatchSet API operation for AWS WAF.
//
// Returns the RegexMatchSet specified by RegexMatchSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetRegexMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRegexMatchSet
func (c *WAF) GetRegexMatchSet(input *GetRegexMatchSetInput) (*GetRegexMatchSetOutput, error) {
	req, out := c.GetRegexMatchSetRequest(input)
	return out, req.Send()
}

// GetRegexMatchSetWithContext is the same as GetRegexMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetRegexMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetRegexMatchSetWithContext(ctx aws.Context, input *GetRegexMatchSetInput, opts ...request.Option) (*GetRegexMatchSetOutput, error) {
	req, out := c.GetRegexMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetRegexPatternSet = "GetRegexPatternSet"

// GetRegexPatternSetRequest generates a "aws/request.Request" representing the
// client's request for the GetRegexPatternSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRegexPatternSet for more information on using the GetRegexPatternSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRegexPatternSetRequest method.
//    req, resp := client.GetRegexPatternSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRegexPatternSet
func (c *WAF) GetRegexPatternSetRequest(input *GetRegexPatternSetInput) (req *request.Request, output *GetRegexPatternSetOutput) {
	op := &request.Operation{
		Name:       opGetRegexPatternSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetRegexPatternSetInput{}
	}

	output = &GetRegexPatternSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetRegexPatternSet API operation for AWS WAF.
//
// Returns the RegexPatternSet specified by RegexPatternSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetRegexPatternSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRegexPatternSet
func (c *WAF) GetRegexPatternSet(input *GetRegexPatternSetInput) (*GetRegexPatternSetOutput, error) {
	req, out := c.GetRegexPatternSetRequest(input)
	return out, req.Send()
}

// GetRegexPatternSetWithContext is the same as GetRegexPatternSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetRegexPatternSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetRegexPatternSetWithContext(ctx aws.Context, input *GetRegexPatternSetInput, opts ...request.Option) (*GetRegexPatternSetOutput, error) {
	req, out := c.GetRegexPatternSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetRule = "GetRule"

// GetRuleRequest generates a "aws/request.Request" representing the
// client's request for the GetRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRule for more information on using the GetRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRuleRequest method.
//    req, resp := client.GetRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRule
func (c *WAF) GetRuleRequest(input *GetRuleInput) (req *request.Request, output *GetRuleOutput) {
	op := &request.Operation{
		Name:       opGetRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetRuleInput{}
	}

	output = &GetRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetRule API operation for AWS WAF.
//
// Returns the Rule that is specified by the RuleId that you included in the
// GetRule request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRule
func (c *WAF) GetRule(input *GetRuleInput) (*GetRuleOutput, error) {
	req, out := c.GetRuleRequest(input)
	return out, req.Send()
}

// GetRuleWithContext is the same as GetRule with the addition of
// the ability to pass a context and additional request options.
//
// See GetRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetRuleWithContext(ctx aws.Context, input *GetRuleInput, opts ...request.Option) (*GetRuleOutput, error) {
	req, out := c.GetRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetRuleGroup = "GetRuleGroup"

// GetRuleGroupRequest generates a "aws/request.Request" representing the
// client's request for the GetRuleGroup operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRuleGroup for more information on using the GetRuleGroup
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRuleGroupRequest method.
//    req, resp := client.GetRuleGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRuleGroup
func (c *WAF) GetRuleGroupRequest(input *GetRuleGroupInput) (req *request.Request, output *GetRuleGroupOutput) {
	op := &request.Operation{
		Name:       opGetRuleGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetRuleGroupInput{}
	}

	output = &GetRuleGroupOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetRuleGroup API operation for AWS WAF.
//
// Returns the RuleGroup that is specified by the RuleGroupId that you included
// in the GetRuleGroup request.
//
// To view the rules in a rule group, use ListActivatedRulesInRuleGroup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetRuleGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetRuleGroup
func (c *WAF) GetRuleGroup(input *GetRuleGroupInput) (*GetRuleGroupOutput, error) {
	req, out := c.GetRuleGroupRequest(input)
	return out, req.Send()
}

// GetRuleGroupWithContext is the same as GetRuleGroup with the addition of
// the ability to pass a context and additional request options.
//
// See GetRuleGroup for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetRuleGroupWithContext(ctx aws.Context, input *GetRuleGroupInput, opts ...request.Option) (*GetRuleGroupOutput, error) {
	req, out := c.GetRuleGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetSampledRequests = "GetSampledRequests"

// GetSampledRequestsRequest generates a "aws/request.Request" representing the
// client's request for the GetSampledRequests operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetSampledRequests for more information on using the GetSampledRequests
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetSampledRequestsRequest method.
//    req, resp := client.GetSampledRequestsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetSampledRequests
func (c *WAF) GetSampledRequestsRequest(input *GetSampledRequestsInput) (req *request.Request, output *GetSampledRequestsOutput) {
	op := &request.Operation{
		Name:       opGetSampledRequests,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetSampledRequestsInput{}
	}

	output = &GetSampledRequestsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetSampledRequests API operation for AWS WAF.
//
// Gets detailed information about a specified number of requests--a sample--that
// AWS WAF randomly selects from among the first 5,000 requests that your AWS
// resource received during a time range that you choose. You can specify a
// sample size of up to 500 requests, and you can specify any time range in
// the previous three hours.
//
// GetSampledRequests returns a time range, which is usually the time range
// that you specified. However, if your resource (such as a CloudFront distribution)
// received 5,000 requests before the specified time range elapsed, GetSampledRequests
// returns an updated time range. This new time range indicates the actual period
// during which AWS WAF selected the requests in the sample.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetSampledRequests for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetSampledRequests
func (c *WAF) GetSampledRequests(input *GetSampledRequestsInput) (*GetSampledRequestsOutput, error) {
	req, out := c.GetSampledRequestsRequest(input)
	return out, req.Send()
}

// GetSampledRequestsWithContext is the same as GetSampledRequests with the addition of
// the ability to pass a context and additional request options.
//
// See GetSampledRequests for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetSampledRequestsWithContext(ctx aws.Context, input *GetSampledRequestsInput, opts ...request.Option) (*GetSampledRequestsOutput, error) {
	req, out := c.GetSampledRequestsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetSizeConstraintSet = "GetSizeConstraintSet"

// GetSizeConstraintSetRequest generates a "aws/request.Request" representing the
// client's request for the GetSizeConstraintSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetSizeConstraintSet for more information on using the GetSizeConstraintSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetSizeConstraintSetRequest method.
//    req, resp := client.GetSizeConstraintSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetSizeConstraintSet
func (c *WAF) GetSizeConstraintSetRequest(input *GetSizeConstraintSetInput) (req *request.Request, output *GetSizeConstraintSetOutput) {
	op := &request.Operation{
		Name:       opGetSizeConstraintSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetSizeConstraintSetInput{}
	}

	output = &GetSizeConstraintSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetSizeConstraintSet API operation for AWS WAF.
//
// Returns the SizeConstraintSet specified by SizeConstraintSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetSizeConstraintSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetSizeConstraintSet
func (c *WAF) GetSizeConstraintSet(input *GetSizeConstraintSetInput) (*GetSizeConstraintSetOutput, error) {
	req, out := c.GetSizeConstraintSetRequest(input)
	return out, req.Send()
}

// GetSizeConstraintSetWithContext is the same as GetSizeConstraintSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetSizeConstraintSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetSizeConstraintSetWithContext(ctx aws.Context, input *GetSizeConstraintSetInput, opts ...request.Option) (*GetSizeConstraintSetOutput, error) {
	req, out := c.GetSizeConstraintSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetSqlInjectionMatchSet = "GetSqlInjectionMatchSet"

// GetSqlInjectionMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the GetSqlInjectionMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetSqlInjectionMatchSet for more information on using the GetSqlInjectionMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetSqlInjectionMatchSetRequest method.
//    req, resp := client.GetSqlInjectionMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetSqlInjectionMatchSet
func (c *WAF) GetSqlInjectionMatchSetRequest(input *GetSqlInjectionMatchSetInput) (req *request.Request, output *GetSqlInjectionMatchSetOutput) {
	op := &request.Operation{
		Name:       opGetSqlInjectionMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetSqlInjectionMatchSetInput{}
	}

	output = &GetSqlInjectionMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetSqlInjectionMatchSet API operation for AWS WAF.
//
// Returns the SqlInjectionMatchSet that is specified by SqlInjectionMatchSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetSqlInjectionMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetSqlInjectionMatchSet
func (c *WAF) GetSqlInjectionMatchSet(input *GetSqlInjectionMatchSetInput) (*GetSqlInjectionMatchSetOutput, error) {
	req, out := c.GetSqlInjectionMatchSetRequest(input)
	return out, req.Send()
}

// GetSqlInjectionMatchSetWithContext is the same as GetSqlInjectionMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetSqlInjectionMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetSqlInjectionMatchSetWithContext(ctx aws.Context, input *GetSqlInjectionMatchSetInput, opts ...request.Option) (*GetSqlInjectionMatchSetOutput, error) {
	req, out := c.GetSqlInjectionMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetWebACL = "GetWebACL"

// GetWebACLRequest generates a "aws/request.Request" representing the
// client's request for the GetWebACL operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetWebACL for more information on using the GetWebACL
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetWebACLRequest method.
//    req, resp := client.GetWebACLRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetWebACL
func (c *WAF) GetWebACLRequest(input *GetWebACLInput) (req *request.Request, output *GetWebACLOutput) {
	op := &request.Operation{
		Name:       opGetWebACL,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetWebACLInput{}
	}

	output = &GetWebACLOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetWebACL API operation for AWS WAF.
//
// Returns the WebACL that is specified by WebACLId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetWebACL for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetWebACL
func (c *WAF) GetWebACL(input *GetWebACLInput) (*GetWebACLOutput, error) {
	req, out := c.GetWebACLRequest(input)
	return out, req.Send()
}

// GetWebACLWithContext is the same as GetWebACL with the addition of
// the ability to pass a context and additional request options.
//
// See GetWebACL for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetWebACLWithContext(ctx aws.Context, input *GetWebACLInput, opts ...request.Option) (*GetWebACLOutput, error) {
	req, out := c.GetWebACLRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetXssMatchSet = "GetXssMatchSet"

// GetXssMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the GetXssMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetXssMatchSet for more information on using the GetXssMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetXssMatchSetRequest method.
//    req, resp := client.GetXssMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetXssMatchSet
func (c *WAF) GetXssMatchSetRequest(input *GetXssMatchSetInput) (req *request.Request, output *GetXssMatchSetOutput) {
	op := &request.Operation{
		Name:       opGetXssMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetXssMatchSetInput{}
	}

	output = &GetXssMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetXssMatchSet API operation for AWS WAF.
//
// Returns the XssMatchSet that is specified by XssMatchSetId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation GetXssMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetXssMatchSet
func (c *WAF) GetXssMatchSet(input *GetXssMatchSetInput) (*GetXssMatchSetOutput, error) {
	req, out := c.GetXssMatchSetRequest(input)
	return out, req.Send()
}

// GetXssMatchSetWithContext is the same as GetXssMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See GetXssMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) GetXssMatchSetWithContext(ctx aws.Context, input *GetXssMatchSetInput, opts ...request.Option) (*GetXssMatchSetOutput, error) {
	req, out := c.GetXssMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListActivatedRulesInRuleGroup = "ListActivatedRulesInRuleGroup"

// ListActivatedRulesInRuleGroupRequest generates a "aws/request.Request" representing the
// client's request for the ListActivatedRulesInRuleGroup operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListActivatedRulesInRuleGroup for more information on using the ListActivatedRulesInRuleGroup
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListActivatedRulesInRuleGroupRequest method.
//    req, resp := client.ListActivatedRulesInRuleGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListActivatedRulesInRuleGroup
func (c *WAF) ListActivatedRulesInRuleGroupRequest(input *ListActivatedRulesInRuleGroupInput) (req *request.Request, output *ListActivatedRulesInRuleGroupOutput) {
	op := &request.Operation{
		Name:       opListActivatedRulesInRuleGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListActivatedRulesInRuleGroupInput{}
	}

	output = &ListActivatedRulesInRuleGroupOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListActivatedRulesInRuleGroup API operation for AWS WAF.
//
// Returns an array of ActivatedRule objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListActivatedRulesInRuleGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListActivatedRulesInRuleGroup
func (c *WAF) ListActivatedRulesInRuleGroup(input *ListActivatedRulesInRuleGroupInput) (*ListActivatedRulesInRuleGroupOutput, error) {
	req, out := c.ListActivatedRulesInRuleGroupRequest(input)
	return out, req.Send()
}

// ListActivatedRulesInRuleGroupWithContext is the same as ListActivatedRulesInRuleGroup with the addition of
// the ability to pass a context and additional request options.
//
// See ListActivatedRulesInRuleGroup for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListActivatedRulesInRuleGroupWithContext(ctx aws.Context, input *ListActivatedRulesInRuleGroupInput, opts ...request.Option) (*ListActivatedRulesInRuleGroupOutput, error) {
	req, out := c.ListActivatedRulesInRuleGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListByteMatchSets = "ListByteMatchSets"

// ListByteMatchSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListByteMatchSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListByteMatchSets for more information on using the ListByteMatchSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListByteMatchSetsRequest method.
//    req, resp := client.ListByteMatchSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListByteMatchSets
func (c *WAF) ListByteMatchSetsRequest(input *ListByteMatchSetsInput) (req *request.Request, output *ListByteMatchSetsOutput) {
	op := &request.Operation{
		Name:       opListByteMatchSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListByteMatchSetsInput{}
	}

	output = &ListByteMatchSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListByteMatchSets API operation for AWS WAF.
//
// Returns an array of ByteMatchSetSummary objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListByteMatchSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListByteMatchSets
func (c *WAF) ListByteMatchSets(input *ListByteMatchSetsInput) (*ListByteMatchSetsOutput, error) {
	req, out := c.ListByteMatchSetsRequest(input)
	return out, req.Send()
}

// ListByteMatchSetsWithContext is the same as ListByteMatchSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListByteMatchSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListByteMatchSetsWithContext(ctx aws.Context, input *ListByteMatchSetsInput, opts ...request.Option) (*ListByteMatchSetsOutput, error) {
	req, out := c.ListByteMatchSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListGeoMatchSets = "ListGeoMatchSets"

// ListGeoMatchSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListGeoMatchSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListGeoMatchSets for more information on using the ListGeoMatchSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListGeoMatchSetsRequest method.
//    req, resp := client.ListGeoMatchSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListGeoMatchSets
func (c *WAF) ListGeoMatchSetsRequest(input *ListGeoMatchSetsInput) (req *request.Request, output *ListGeoMatchSetsOutput) {
	op := &request.Operation{
		Name:       opListGeoMatchSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListGeoMatchSetsInput{}
	}

	output = &ListGeoMatchSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListGeoMatchSets API operation for AWS WAF.
//
// Returns an array of GeoMatchSetSummary objects in the response.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListGeoMatchSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListGeoMatchSets
func (c *WAF) ListGeoMatchSets(input *ListGeoMatchSetsInput) (*ListGeoMatchSetsOutput, error) {
	req, out := c.ListGeoMatchSetsRequest(input)
	return out, req.Send()
}

// ListGeoMatchSetsWithContext is the same as ListGeoMatchSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListGeoMatchSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListGeoMatchSetsWithContext(ctx aws.Context, input *ListGeoMatchSetsInput, opts ...request.Option) (*ListGeoMatchSetsOutput, error) {
	req, out := c.ListGeoMatchSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListIPSets = "ListIPSets"

// ListIPSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListIPSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListIPSets for more information on using the ListIPSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListIPSetsRequest method.
//    req, resp := client.ListIPSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListIPSets
func (c *WAF) ListIPSetsRequest(input *ListIPSetsInput) (req *request.Request, output *ListIPSetsOutput) {
	op := &request.Operation{
		Name:       opListIPSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListIPSetsInput{}
	}

	output = &ListIPSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListIPSets API operation for AWS WAF.
//
// Returns an array of IPSetSummary objects in the response.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListIPSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListIPSets
func (c *WAF) ListIPSets(input *ListIPSetsInput) (*ListIPSetsOutput, error) {
	req, out := c.ListIPSetsRequest(input)
	return out, req.Send()
}

// ListIPSetsWithContext is the same as ListIPSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListIPSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListIPSetsWithContext(ctx aws.Context, input *ListIPSetsInput, opts ...request.Option) (*ListIPSetsOutput, error) {
	req, out := c.ListIPSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListLoggingConfigurations = "ListLoggingConfigurations"

// ListLoggingConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the ListLoggingConfigurations operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListLoggingConfigurations for more information on using the ListLoggingConfigurations
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListLoggingConfigurationsRequest method.
//    req, resp := client.ListLoggingConfigurationsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListLoggingConfigurations
func (c *WAF) ListLoggingConfigurationsRequest(input *ListLoggingConfigurationsInput) (req *request.Request, output *ListLoggingConfigurationsOutput) {
	op := &request.Operation{
		Name:       opListLoggingConfigurations,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListLoggingConfigurationsInput{}
	}

	output = &ListLoggingConfigurationsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListLoggingConfigurations API operation for AWS WAF.
//
// Returns an array of LoggingConfiguration objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListLoggingConfigurations for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListLoggingConfigurations
func (c *WAF) ListLoggingConfigurations(input *ListLoggingConfigurationsInput) (*ListLoggingConfigurationsOutput, error) {
	req, out := c.ListLoggingConfigurationsRequest(input)
	return out, req.Send()
}

// ListLoggingConfigurationsWithContext is the same as ListLoggingConfigurations with the addition of
// the ability to pass a context and additional request options.
//
// See ListLoggingConfigurations for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListLoggingConfigurationsWithContext(ctx aws.Context, input *ListLoggingConfigurationsInput, opts ...request.Option) (*ListLoggingConfigurationsOutput, error) {
	req, out := c.ListLoggingConfigurationsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListRateBasedRules = "ListRateBasedRules"

// ListRateBasedRulesRequest generates a "aws/request.Request" representing the
// client's request for the ListRateBasedRules operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListRateBasedRules for more information on using the ListRateBasedRules
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListRateBasedRulesRequest method.
//    req, resp := client.ListRateBasedRulesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRateBasedRules
func (c *WAF) ListRateBasedRulesRequest(input *ListRateBasedRulesInput) (req *request.Request, output *ListRateBasedRulesOutput) {
	op := &request.Operation{
		Name:       opListRateBasedRules,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListRateBasedRulesInput{}
	}

	output = &ListRateBasedRulesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListRateBasedRules API operation for AWS WAF.
//
// Returns an array of RuleSummary objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListRateBasedRules for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRateBasedRules
func (c *WAF) ListRateBasedRules(input *ListRateBasedRulesInput) (*ListRateBasedRulesOutput, error) {
	req, out := c.ListRateBasedRulesRequest(input)
	return out, req.Send()
}

// ListRateBasedRulesWithContext is the same as ListRateBasedRules with the addition of
// the ability to pass a context and additional request options.
//
// See ListRateBasedRules for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListRateBasedRulesWithContext(ctx aws.Context, input *ListRateBasedRulesInput, opts ...request.Option) (*ListRateBasedRulesOutput, error) {
	req, out := c.ListRateBasedRulesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListRegexMatchSets = "ListRegexMatchSets"

// ListRegexMatchSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListRegexMatchSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListRegexMatchSets for more information on using the ListRegexMatchSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListRegexMatchSetsRequest method.
//    req, resp := client.ListRegexMatchSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRegexMatchSets
func (c *WAF) ListRegexMatchSetsRequest(input *ListRegexMatchSetsInput) (req *request.Request, output *ListRegexMatchSetsOutput) {
	op := &request.Operation{
		Name:       opListRegexMatchSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListRegexMatchSetsInput{}
	}

	output = &ListRegexMatchSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListRegexMatchSets API operation for AWS WAF.
//
// Returns an array of RegexMatchSetSummary objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListRegexMatchSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRegexMatchSets
func (c *WAF) ListRegexMatchSets(input *ListRegexMatchSetsInput) (*ListRegexMatchSetsOutput, error) {
	req, out := c.ListRegexMatchSetsRequest(input)
	return out, req.Send()
}

// ListRegexMatchSetsWithContext is the same as ListRegexMatchSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListRegexMatchSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListRegexMatchSetsWithContext(ctx aws.Context, input *ListRegexMatchSetsInput, opts ...request.Option) (*ListRegexMatchSetsOutput, error) {
	req, out := c.ListRegexMatchSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListRegexPatternSets = "ListRegexPatternSets"

// ListRegexPatternSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListRegexPatternSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListRegexPatternSets for more information on using the ListRegexPatternSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListRegexPatternSetsRequest method.
//    req, resp := client.ListRegexPatternSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRegexPatternSets
func (c *WAF) ListRegexPatternSetsRequest(input *ListRegexPatternSetsInput) (req *request.Request, output *ListRegexPatternSetsOutput) {
	op := &request.Operation{
		Name:       opListRegexPatternSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListRegexPatternSetsInput{}
	}

	output = &ListRegexPatternSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListRegexPatternSets API operation for AWS WAF.
//
// Returns an array of RegexPatternSetSummary objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListRegexPatternSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRegexPatternSets
func (c *WAF) ListRegexPatternSets(input *ListRegexPatternSetsInput) (*ListRegexPatternSetsOutput, error) {
	req, out := c.ListRegexPatternSetsRequest(input)
	return out, req.Send()
}

// ListRegexPatternSetsWithContext is the same as ListRegexPatternSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListRegexPatternSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListRegexPatternSetsWithContext(ctx aws.Context, input *ListRegexPatternSetsInput, opts ...request.Option) (*ListRegexPatternSetsOutput, error) {
	req, out := c.ListRegexPatternSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListRuleGroups = "ListRuleGroups"

// ListRuleGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListRuleGroups operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListRuleGroups for more information on using the ListRuleGroups
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListRuleGroupsRequest method.
//    req, resp := client.ListRuleGroupsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRuleGroups
func (c *WAF) ListRuleGroupsRequest(input *ListRuleGroupsInput) (req *request.Request, output *ListRuleGroupsOutput) {
	op := &request.Operation{
		Name:       opListRuleGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListRuleGroupsInput{}
	}

	output = &ListRuleGroupsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListRuleGroups API operation for AWS WAF.
//
// Returns an array of RuleGroup objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListRuleGroups for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRuleGroups
func (c *WAF) ListRuleGroups(input *ListRuleGroupsInput) (*ListRuleGroupsOutput, error) {
	req, out := c.ListRuleGroupsRequest(input)
	return out, req.Send()
}

// ListRuleGroupsWithContext is the same as ListRuleGroups with the addition of
// the ability to pass a context and additional request options.
//
// See ListRuleGroups for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListRuleGroupsWithContext(ctx aws.Context, input *ListRuleGroupsInput, opts ...request.Option) (*ListRuleGroupsOutput, error) {
	req, out := c.ListRuleGroupsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListRules = "ListRules"

// ListRulesRequest generates a "aws/request.Request" representing the
// client's request for the ListRules operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListRules for more information on using the ListRules
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListRulesRequest method.
//    req, resp := client.ListRulesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRules
func (c *WAF) ListRulesRequest(input *ListRulesInput) (req *request.Request, output *ListRulesOutput) {
	op := &request.Operation{
		Name:       opListRules,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListRulesInput{}
	}

	output = &ListRulesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListRules API operation for AWS WAF.
//
// Returns an array of RuleSummary objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListRules for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListRules
func (c *WAF) ListRules(input *ListRulesInput) (*ListRulesOutput, error) {
	req, out := c.ListRulesRequest(input)
	return out, req.Send()
}

// ListRulesWithContext is the same as ListRules with the addition of
// the ability to pass a context and additional request options.
//
// See ListRules for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListRulesWithContext(ctx aws.Context, input *ListRulesInput, opts ...request.Option) (*ListRulesOutput, error) {
	req, out := c.ListRulesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListSizeConstraintSets = "ListSizeConstraintSets"

// ListSizeConstraintSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListSizeConstraintSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListSizeConstraintSets for more information on using the ListSizeConstraintSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListSizeConstraintSetsRequest method.
//    req, resp := client.ListSizeConstraintSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListSizeConstraintSets
func (c *WAF) ListSizeConstraintSetsRequest(input *ListSizeConstraintSetsInput) (req *request.Request, output *ListSizeConstraintSetsOutput) {
	op := &request.Operation{
		Name:       opListSizeConstraintSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListSizeConstraintSetsInput{}
	}

	output = &ListSizeConstraintSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListSizeConstraintSets API operation for AWS WAF.
//
// Returns an array of SizeConstraintSetSummary objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListSizeConstraintSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListSizeConstraintSets
func (c *WAF) ListSizeConstraintSets(input *ListSizeConstraintSetsInput) (*ListSizeConstraintSetsOutput, error) {
	req, out := c.ListSizeConstraintSetsRequest(input)
	return out, req.Send()
}

// ListSizeConstraintSetsWithContext is the same as ListSizeConstraintSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListSizeConstraintSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListSizeConstraintSetsWithContext(ctx aws.Context, input *ListSizeConstraintSetsInput, opts ...request.Option) (*ListSizeConstraintSetsOutput, error) {
	req, out := c.ListSizeConstraintSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListSqlInjectionMatchSets = "ListSqlInjectionMatchSets"

// ListSqlInjectionMatchSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListSqlInjectionMatchSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListSqlInjectionMatchSets for more information on using the ListSqlInjectionMatchSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListSqlInjectionMatchSetsRequest method.
//    req, resp := client.ListSqlInjectionMatchSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListSqlInjectionMatchSets
func (c *WAF) ListSqlInjectionMatchSetsRequest(input *ListSqlInjectionMatchSetsInput) (req *request.Request, output *ListSqlInjectionMatchSetsOutput) {
	op := &request.Operation{
		Name:       opListSqlInjectionMatchSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListSqlInjectionMatchSetsInput{}
	}

	output = &ListSqlInjectionMatchSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListSqlInjectionMatchSets API operation for AWS WAF.
//
// Returns an array of SqlInjectionMatchSet objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListSqlInjectionMatchSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListSqlInjectionMatchSets
func (c *WAF) ListSqlInjectionMatchSets(input *ListSqlInjectionMatchSetsInput) (*ListSqlInjectionMatchSetsOutput, error) {
	req, out := c.ListSqlInjectionMatchSetsRequest(input)
	return out, req.Send()
}

// ListSqlInjectionMatchSetsWithContext is the same as ListSqlInjectionMatchSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListSqlInjectionMatchSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListSqlInjectionMatchSetsWithContext(ctx aws.Context, input *ListSqlInjectionMatchSetsInput, opts ...request.Option) (*ListSqlInjectionMatchSetsOutput, error) {
	req, out := c.ListSqlInjectionMatchSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListSubscribedRuleGroups = "ListSubscribedRuleGroups"

// ListSubscribedRuleGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListSubscribedRuleGroups operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListSubscribedRuleGroups for more information on using the ListSubscribedRuleGroups
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListSubscribedRuleGroupsRequest method.
//    req, resp := client.ListSubscribedRuleGroupsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListSubscribedRuleGroups
func (c *WAF) ListSubscribedRuleGroupsRequest(input *ListSubscribedRuleGroupsInput) (req *request.Request, output *ListSubscribedRuleGroupsOutput) {
	op := &request.Operation{
		Name:       opListSubscribedRuleGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListSubscribedRuleGroupsInput{}
	}

	output = &ListSubscribedRuleGroupsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListSubscribedRuleGroups API operation for AWS WAF.
//
// Returns an array of RuleGroup objects that you are subscribed to.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListSubscribedRuleGroups for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListSubscribedRuleGroups
func (c *WAF) ListSubscribedRuleGroups(input *ListSubscribedRuleGroupsInput) (*ListSubscribedRuleGroupsOutput, error) {
	req, out := c.ListSubscribedRuleGroupsRequest(input)
	return out, req.Send()
}

// ListSubscribedRuleGroupsWithContext is the same as ListSubscribedRuleGroups with the addition of
// the ability to pass a context and additional request options.
//
// See ListSubscribedRuleGroups for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListSubscribedRuleGroupsWithContext(ctx aws.Context, input *ListSubscribedRuleGroupsInput, opts ...request.Option) (*ListSubscribedRuleGroupsOutput, error) {
	req, out := c.ListSubscribedRuleGroupsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListWebACLs = "ListWebACLs"

// ListWebACLsRequest generates a "aws/request.Request" representing the
// client's request for the ListWebACLs operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListWebACLs for more information on using the ListWebACLs
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListWebACLsRequest method.
//    req, resp := client.ListWebACLsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListWebACLs
func (c *WAF) ListWebACLsRequest(input *ListWebACLsInput) (req *request.Request, output *ListWebACLsOutput) {
	op := &request.Operation{
		Name:       opListWebACLs,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListWebACLsInput{}
	}

	output = &ListWebACLsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListWebACLs API operation for AWS WAF.
//
// Returns an array of WebACLSummary objects in the response.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListWebACLs for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListWebACLs
func (c *WAF) ListWebACLs(input *ListWebACLsInput) (*ListWebACLsOutput, error) {
	req, out := c.ListWebACLsRequest(input)
	return out, req.Send()
}

// ListWebACLsWithContext is the same as ListWebACLs with the addition of
// the ability to pass a context and additional request options.
//
// See ListWebACLs for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListWebACLsWithContext(ctx aws.Context, input *ListWebACLsInput, opts ...request.Option) (*ListWebACLsOutput, error) {
	req, out := c.ListWebACLsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListXssMatchSets = "ListXssMatchSets"

// ListXssMatchSetsRequest generates a "aws/request.Request" representing the
// client's request for the ListXssMatchSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListXssMatchSets for more information on using the ListXssMatchSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListXssMatchSetsRequest method.
//    req, resp := client.ListXssMatchSetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListXssMatchSets
func (c *WAF) ListXssMatchSetsRequest(input *ListXssMatchSetsInput) (req *request.Request, output *ListXssMatchSetsOutput) {
	op := &request.Operation{
		Name:       opListXssMatchSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListXssMatchSetsInput{}
	}

	output = &ListXssMatchSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListXssMatchSets API operation for AWS WAF.
//
// Returns an array of XssMatchSet objects.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation ListXssMatchSets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListXssMatchSets
func (c *WAF) ListXssMatchSets(input *ListXssMatchSetsInput) (*ListXssMatchSetsOutput, error) {
	req, out := c.ListXssMatchSetsRequest(input)
	return out, req.Send()
}

// ListXssMatchSetsWithContext is the same as ListXssMatchSets with the addition of
// the ability to pass a context and additional request options.
//
// See ListXssMatchSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) ListXssMatchSetsWithContext(ctx aws.Context, input *ListXssMatchSetsInput, opts ...request.Option) (*ListXssMatchSetsOutput, error) {
	req, out := c.ListXssMatchSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opPutLoggingConfiguration = "PutLoggingConfiguration"

// PutLoggingConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the PutLoggingConfiguration operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See PutLoggingConfiguration for more information on using the PutLoggingConfiguration
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the PutLoggingConfigurationRequest method.
//    req, resp := client.PutLoggingConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/PutLoggingConfiguration
func (c *WAF) PutLoggingConfigurationRequest(input *PutLoggingConfigurationInput) (req *request.Request, output *PutLoggingConfigurationOutput) {
	op := &request.Operation{
		Name:       opPutLoggingConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutLoggingConfigurationInput{}
	}

	output = &PutLoggingConfigurationOutput{}
	req = c.newRequest(op, input, output)
	return
}

// PutLoggingConfiguration API operation for AWS WAF.
//
// Associates a LoggingConfiguration with a specified web ACL.
//
// You can access information about all traffic that AWS WAF inspects using
// the following steps:
//
// Create an Amazon Kinesis Data Firehose .
//
// Create the data firehose with a PUT source and in the region that you are
// operating. However, if you are capturing logs for Amazon CloudFront, always
// create the firehose in US East (N. Virginia).
//
// Associate that firehose to your web ACL using a PutLoggingConfiguration request.
//
// When you successfully enable logging using a PutLoggingConfiguration request,
// AWS WAF will create a service linked role with the necessary permissions
// to write logs to the Amazon Kinesis Data Firehose. For more information,
// see Logging Web ACL Traffic Information (https://docs.aws.amazon.com/waf/latest/developerguide/logging.html)
// in the AWS WAF Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation PutLoggingConfiguration for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeServiceLinkedRoleErrorException "WAFServiceLinkedRoleErrorException"
//   AWS WAF is not able to access the service linked role. This can be caused
//   by a previous PutLoggingConfiguration request, which can lock the service
//   linked role for about 20 seconds. Please try your request again. The service
//   linked role can also be locked by a previous DeleteServiceLinkedRole request,
//   which can lock the role for 15 minutes or more. If you recently made a DeleteServiceLinkedRole,
//   wait at least 15 minutes and try the request again. If you receive this same
//   exception again, you will have to wait additional time until the role is
//   unlocked.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/PutLoggingConfiguration
func (c *WAF) PutLoggingConfiguration(input *PutLoggingConfigurationInput) (*PutLoggingConfigurationOutput, error) {
	req, out := c.PutLoggingConfigurationRequest(input)
	return out, req.Send()
}

// PutLoggingConfigurationWithContext is the same as PutLoggingConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See PutLoggingConfiguration for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) PutLoggingConfigurationWithContext(ctx aws.Context, input *PutLoggingConfigurationInput, opts ...request.Option) (*PutLoggingConfigurationOutput, error) {
	req, out := c.PutLoggingConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opPutPermissionPolicy = "PutPermissionPolicy"

// PutPermissionPolicyRequest generates a "aws/request.Request" representing the
// client's request for the PutPermissionPolicy operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See PutPermissionPolicy for more information on using the PutPermissionPolicy
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the PutPermissionPolicyRequest method.
//    req, resp := client.PutPermissionPolicyRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/PutPermissionPolicy
func (c *WAF) PutPermissionPolicyRequest(input *PutPermissionPolicyInput) (req *request.Request, output *PutPermissionPolicyOutput) {
	op := &request.Operation{
		Name:       opPutPermissionPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutPermissionPolicyInput{}
	}

	output = &PutPermissionPolicyOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
	return
}

// PutPermissionPolicy API operation for AWS WAF.
//
// Attaches a IAM policy to the specified resource. The only supported use for
// this action is to share a RuleGroup across accounts.
//
// The PutPermissionPolicy is subject to the following restrictions:
//
//    * You can attach only one policy with each PutPermissionPolicy request.
//
//    * The policy must include an Effect, Action and Principal.
//
//    * Effect must specify Allow.
//
//    * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL,
//    waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard
//    actions in the policy will be rejected.
//
//    * The policy cannot include a Resource parameter.
//
//    * The ARN in the request must be a valid WAF RuleGroup ARN and the RuleGroup
//    must exist in the same region.
//
//    * The user making the request must be the owner of the RuleGroup.
//
//    * Your policy must be composed using IAM Policy version 2012-10-17.
//
// For more information, see IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html).
//
// An example of a valid policy parameter is shown in the Examples section below.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation PutPermissionPolicy for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInvalidPermissionPolicyException "WAFInvalidPermissionPolicyException"
//   The operation failed because the specified policy is not in the proper format.
//
//   The policy is subject to the following restrictions:
//
//      * You can attach only one policy with each PutPermissionPolicy request.
//
//      * The policy must include an Effect, Action and Principal.
//
//      * Effect must specify Allow.
//
//      * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL,
//      waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard
//      actions in the policy will be rejected.
//
//      * The policy cannot include a Resource parameter.
//
//      * The ARN in the request must be a valid WAF RuleGroup ARN and the RuleGroup
//      must exist in the same region.
//
//      * The user making the request must be the owner of the RuleGroup.
//
//      * Your policy must be composed using IAM Policy version 2012-10-17.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/PutPermissionPolicy
func (c *WAF) PutPermissionPolicy(input *PutPermissionPolicyInput) (*PutPermissionPolicyOutput, error) {
	req, out := c.PutPermissionPolicyRequest(input)
	return out, req.Send()
}

// PutPermissionPolicyWithContext is the same as PutPermissionPolicy with the addition of
// the ability to pass a context and additional request options.
//
// See PutPermissionPolicy for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) PutPermissionPolicyWithContext(ctx aws.Context, input *PutPermissionPolicyInput, opts ...request.Option) (*PutPermissionPolicyOutput, error) {
	req, out := c.PutPermissionPolicyRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateByteMatchSet = "UpdateByteMatchSet"

// UpdateByteMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateByteMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateByteMatchSet for more information on using the UpdateByteMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateByteMatchSetRequest method.
//    req, resp := client.UpdateByteMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateByteMatchSet
func (c *WAF) UpdateByteMatchSetRequest(input *UpdateByteMatchSetInput) (req *request.Request, output *UpdateByteMatchSetOutput) {
	op := &request.Operation{
		Name:       opUpdateByteMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateByteMatchSetInput{}
	}

	output = &UpdateByteMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateByteMatchSet API operation for AWS WAF.
//
// Inserts or deletes ByteMatchTuple objects (filters) in a ByteMatchSet. For
// each ByteMatchTuple object, you specify the following values:
//
//    * Whether to insert or delete the object from the array. If you want to
//    change a ByteMatchSetUpdate object, you delete the existing object and
//    add a new one.
//
//    * The part of a web request that you want AWS WAF to inspect, such as
//    a query string or the value of the User-Agent header.
//
//    * The bytes (typically a string that corresponds with ASCII characters)
//    that you want AWS WAF to look for. For more information, including how
//    you specify the values for the AWS WAF API and the AWS CLI or SDKs, see
//    TargetString in the ByteMatchTuple data type.
//
//    * Where to look, such as at the beginning or the end of a query string.
//
//    * Whether to perform any conversions on the request, such as converting
//    it to lowercase, before inspecting it for the specified string.
//
// For example, you can add a ByteMatchSetUpdate object that matches web requests
// in which User-Agent headers contain the string BadBot. You can then configure
// AWS WAF to block those requests.
//
// To create and configure a ByteMatchSet, perform the following steps:
//
// Create a ByteMatchSet. For more information, see CreateByteMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateByteMatchSet request.
//
// Submit an UpdateByteMatchSet request to specify the part of the request that
// you want AWS WAF to inspect (for example, the header or the URI) and the
// value that you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateByteMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateByteMatchSet
func (c *WAF) UpdateByteMatchSet(input *UpdateByteMatchSetInput) (*UpdateByteMatchSetOutput, error) {
	req, out := c.UpdateByteMatchSetRequest(input)
	return out, req.Send()
}

// UpdateByteMatchSetWithContext is the same as UpdateByteMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateByteMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateByteMatchSetWithContext(ctx aws.Context, input *UpdateByteMatchSetInput, opts ...request.Option) (*UpdateByteMatchSetOutput, error) {
	req, out := c.UpdateByteMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateGeoMatchSet = "UpdateGeoMatchSet"

// UpdateGeoMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateGeoMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateGeoMatchSet for more information on using the UpdateGeoMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateGeoMatchSetRequest method.
//    req, resp := client.UpdateGeoMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateGeoMatchSet
func (c *WAF) UpdateGeoMatchSetRequest(input *UpdateGeoMatchSetInput) (req *request.Request, output *UpdateGeoMatchSetOutput) {
	op := &request.Operation{
		Name:       opUpdateGeoMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateGeoMatchSetInput{}
	}

	output = &UpdateGeoMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateGeoMatchSet API operation for AWS WAF.
//
// Inserts or deletes GeoMatchConstraint objects in an GeoMatchSet. For each
// GeoMatchConstraint object, you specify the following values:
//
//    * Whether to insert or delete the object from the array. If you want to
//    change an GeoMatchConstraint object, you delete the existing object and
//    add a new one.
//
//    * The Type. The only valid value for Type is Country.
//
//    * The Value, which is a two character code for the country to add to the
//    GeoMatchConstraint object. Valid codes are listed in GeoMatchConstraint$Value.
//
// To create and configure an GeoMatchSet, perform the following steps:
//
// Submit a CreateGeoMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateGeoMatchSet request.
//
// Submit an UpdateGeoMatchSet request to specify the country that you want
// AWS WAF to watch for.
//
// When you update an GeoMatchSet, you specify the country that you want to
// add and/or the country that you want to delete. If you want to change a country,
// you delete the existing country and add the new one.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateGeoMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateGeoMatchSet
func (c *WAF) UpdateGeoMatchSet(input *UpdateGeoMatchSetInput) (*UpdateGeoMatchSetOutput, error) {
	req, out := c.UpdateGeoMatchSetRequest(input)
	return out, req.Send()
}

// UpdateGeoMatchSetWithContext is the same as UpdateGeoMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateGeoMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateGeoMatchSetWithContext(ctx aws.Context, input *UpdateGeoMatchSetInput, opts ...request.Option) (*UpdateGeoMatchSetOutput, error) {
	req, out := c.UpdateGeoMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateIPSet = "UpdateIPSet"

// UpdateIPSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateIPSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateIPSet for more information on using the UpdateIPSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateIPSetRequest method.
//    req, resp := client.UpdateIPSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateIPSet
func (c *WAF) UpdateIPSetRequest(input *UpdateIPSetInput) (req *request.Request, output *UpdateIPSetOutput) {
	op := &request.Operation{
		Name:       opUpdateIPSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateIPSetInput{}
	}

	output = &UpdateIPSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateIPSet API operation for AWS WAF.
//
// Inserts or deletes IPSetDescriptor objects in an IPSet. For each IPSetDescriptor
// object, you specify the following values:
//
//    * Whether to insert or delete the object from the array. If you want to
//    change an IPSetDescriptor object, you delete the existing object and add
//    a new one.
//
//    * The IP address version, IPv4 or IPv6.
//
//    * The IP address in CIDR notation, for example, 192.0.2.0/24 (for the
//    range of IP addresses from 192.0.2.0 to 192.0.2.255) or 192.0.2.44/32
//    (for the individual IP address 192.0.2.44).
//
// AWS WAF supports IPv4 address ranges: /8 and any range between /16 through
// /32. AWS WAF supports IPv6 address ranges: /24, /32, /48, /56, /64, and /128.
// For more information about CIDR notation, see the Wikipedia entry Classless
// Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing).
//
// IPv6 addresses can be represented using any of the following formats:
//
//    * 1111:0000:0000:0000:0000:0000:0000:0111/128
//
//    * 1111:0:0:0:0:0:0:0111/128
//
//    * 1111::0111/128
//
//    * 1111::111/128
//
// You use an IPSet to specify which web requests you want to allow or block
// based on the IP addresses that the requests originated from. For example,
// if you're receiving a lot of requests from one or a small number of IP addresses
// and you want to block the requests, you can create an IPSet that specifies
// those IP addresses, and then configure AWS WAF to block the requests.
//
// To create and configure an IPSet, perform the following steps:
//
// Submit a CreateIPSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateIPSet request.
//
// Submit an UpdateIPSet request to specify the IP addresses that you want AWS
// WAF to watch for.
//
// When you update an IPSet, you specify the IP addresses that you want to add
// and/or the IP addresses that you want to delete. If you want to change an
// IP address, you delete the existing IP address and add the new one.
//
// You can insert a maximum of 1000 addresses in a single request.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateIPSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateIPSet
func (c *WAF) UpdateIPSet(input *UpdateIPSetInput) (*UpdateIPSetOutput, error) {
	req, out := c.UpdateIPSetRequest(input)
	return out, req.Send()
}

// UpdateIPSetWithContext is the same as UpdateIPSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateIPSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateIPSetWithContext(ctx aws.Context, input *UpdateIPSetInput, opts ...request.Option) (*UpdateIPSetOutput, error) {
	req, out := c.UpdateIPSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateRateBasedRule = "UpdateRateBasedRule"

// UpdateRateBasedRuleRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRateBasedRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateRateBasedRule for more information on using the UpdateRateBasedRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateRateBasedRuleRequest method.
//    req, resp := client.UpdateRateBasedRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRateBasedRule
func (c *WAF) UpdateRateBasedRuleRequest(input *UpdateRateBasedRuleInput) (req *request.Request, output *UpdateRateBasedRuleOutput) {
	op := &request.Operation{
		Name:       opUpdateRateBasedRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateRateBasedRuleInput{}
	}

	output = &UpdateRateBasedRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateRateBasedRule API operation for AWS WAF.
//
// Inserts or deletes Predicate objects in a rule and updates the RateLimit
// in the rule.
//
// Each Predicate object identifies a predicate, such as a ByteMatchSet or an
// IPSet, that specifies the web requests that you want to block or count. The
// RateLimit specifies the number of requests every five minutes that triggers
// the rule.
//
// If you add more than one predicate to a RateBasedRule, a request must match
// all the predicates and exceed the RateLimit to be counted or blocked. For
// example, suppose you add the following to a RateBasedRule:
//
//    * An IPSet that matches the IP address 192.0.2.44/32
//
//    * A ByteMatchSet that matches BadBot in the User-Agent header
//
// Further, you specify a RateLimit of 15,000.
//
// You then add the RateBasedRule to a WebACL and specify that you want to block
// requests that satisfy the rule. For a request to be blocked, it must come
// from the IP address 192.0.2.44 and the User-Agent header in the request must
// contain the value BadBot. Further, requests that match these two conditions
// much be received at a rate of more than 15,000 every five minutes. If the
// rate drops below this limit, AWS WAF no longer blocks the requests.
//
// As a second example, suppose you want to limit requests to a particular page
// on your site. To do this, you could add the following to a RateBasedRule:
//
//    * A ByteMatchSet with FieldToMatch of URI
//
//    * A PositionalConstraint of STARTS_WITH
//
//    * A TargetString of login
//
// Further, you specify a RateLimit of 15,000.
//
// By adding this RateBasedRule to a WebACL, you could limit requests to your
// login page without affecting the rest of your site.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateRateBasedRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRateBasedRule
func (c *WAF) UpdateRateBasedRule(input *UpdateRateBasedRuleInput) (*UpdateRateBasedRuleOutput, error) {
	req, out := c.UpdateRateBasedRuleRequest(input)
	return out, req.Send()
}

// UpdateRateBasedRuleWithContext is the same as UpdateRateBasedRule with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateRateBasedRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateRateBasedRuleWithContext(ctx aws.Context, input *UpdateRateBasedRuleInput, opts ...request.Option) (*UpdateRateBasedRuleOutput, error) {
	req, out := c.UpdateRateBasedRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateRegexMatchSet = "UpdateRegexMatchSet"

// UpdateRegexMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRegexMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateRegexMatchSet for more information on using the UpdateRegexMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateRegexMatchSetRequest method.
//    req, resp := client.UpdateRegexMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRegexMatchSet
func (c *WAF) UpdateRegexMatchSetRequest(input *UpdateRegexMatchSetInput) (req *request.Request, output *UpdateRegexMatchSetOutput) {
	op := &request.Operation{
		Name:       opUpdateRegexMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateRegexMatchSetInput{}
	}

	output = &UpdateRegexMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateRegexMatchSet API operation for AWS WAF.
//
// Inserts or deletes RegexMatchTuple objects (filters) in a RegexMatchSet.
// For each RegexMatchSetUpdate object, you specify the following values:
//
//    * Whether to insert or delete the object from the array. If you want to
//    change a RegexMatchSetUpdate object, you delete the existing object and
//    add a new one.
//
//    * The part of a web request that you want AWS WAF to inspectupdate, such
//    as a query string or the value of the User-Agent header.
//
//    * The identifier of the pattern (a regular expression) that you want AWS
//    WAF to look for. For more information, see RegexPatternSet.
//
//    * Whether to perform any conversions on the request, such as converting
//    it to lowercase, before inspecting it for the specified string.
//
// For example, you can create a RegexPatternSet that matches any requests with
// User-Agent headers that contain the string B[a@]dB[o0]t. You can then configure
// AWS WAF to reject those requests.
//
// To create and configure a RegexMatchSet, perform the following steps:
//
// Create a RegexMatchSet. For more information, see CreateRegexMatchSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRegexMatchSet request.
//
// Submit an UpdateRegexMatchSet request to specify the part of the request
// that you want AWS WAF to inspect (for example, the header or the URI) and
// the identifier of the RegexPatternSet that contain the regular expression
// patters you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateRegexMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeDisallowedNameException "WAFDisallowedNameException"
//   The name specified is invalid.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRegexMatchSet
func (c *WAF) UpdateRegexMatchSet(input *UpdateRegexMatchSetInput) (*UpdateRegexMatchSetOutput, error) {
	req, out := c.UpdateRegexMatchSetRequest(input)
	return out, req.Send()
}

// UpdateRegexMatchSetWithContext is the same as UpdateRegexMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateRegexMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateRegexMatchSetWithContext(ctx aws.Context, input *UpdateRegexMatchSetInput, opts ...request.Option) (*UpdateRegexMatchSetOutput, error) {
	req, out := c.UpdateRegexMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateRegexPatternSet = "UpdateRegexPatternSet"

// UpdateRegexPatternSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRegexPatternSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateRegexPatternSet for more information on using the UpdateRegexPatternSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateRegexPatternSetRequest method.
//    req, resp := client.UpdateRegexPatternSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRegexPatternSet
func (c *WAF) UpdateRegexPatternSetRequest(input *UpdateRegexPatternSetInput) (req *request.Request, output *UpdateRegexPatternSetOutput) {
	op := &request.Operation{
		Name:       opUpdateRegexPatternSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateRegexPatternSetInput{}
	}

	output = &UpdateRegexPatternSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateRegexPatternSet API operation for AWS WAF.
//
// Inserts or deletes RegexPatternString objects in a RegexPatternSet. For each
// RegexPatternString object, you specify the following values:
//
//    * Whether to insert or delete the RegexPatternString.
//
//    * The regular expression pattern that you want to insert or delete. For
//    more information, see RegexPatternSet.
//
// For example, you can create a RegexPatternString such as B[a@]dB[o0]t. AWS
// WAF will match this RegexPatternString to:
//
//    * BadBot
//
//    * BadB0t
//
//    * B@dBot
//
//    * B@dB0t
//
// To create and configure a RegexPatternSet, perform the following steps:
//
// Create a RegexPatternSet. For more information, see CreateRegexPatternSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRegexPatternSet request.
//
// Submit an UpdateRegexPatternSet request to specify the regular expression
// pattern that you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateRegexPatternSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidRegexPatternException "WAFInvalidRegexPatternException"
//   The regular expression (regex) you specified in RegexPatternString is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRegexPatternSet
func (c *WAF) UpdateRegexPatternSet(input *UpdateRegexPatternSetInput) (*UpdateRegexPatternSetOutput, error) {
	req, out := c.UpdateRegexPatternSetRequest(input)
	return out, req.Send()
}

// UpdateRegexPatternSetWithContext is the same as UpdateRegexPatternSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateRegexPatternSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateRegexPatternSetWithContext(ctx aws.Context, input *UpdateRegexPatternSetInput, opts ...request.Option) (*UpdateRegexPatternSetOutput, error) {
	req, out := c.UpdateRegexPatternSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateRule = "UpdateRule"

// UpdateRuleRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRule operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateRule for more information on using the UpdateRule
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateRuleRequest method.
//    req, resp := client.UpdateRuleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRule
func (c *WAF) UpdateRuleRequest(input *UpdateRuleInput) (req *request.Request, output *UpdateRuleOutput) {
	op := &request.Operation{
		Name:       opUpdateRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateRuleInput{}
	}

	output = &UpdateRuleOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateRule API operation for AWS WAF.
//
// Inserts or deletes Predicate objects in a Rule. Each Predicate object identifies
// a predicate, such as a ByteMatchSet or an IPSet, that specifies the web requests
// that you want to allow, block, or count. If you add more than one predicate
// to a Rule, a request must match all of the specifications to be allowed,
// blocked, or counted. For example, suppose that you add the following to a
// Rule:
//
//    * A ByteMatchSet that matches the value BadBot in the User-Agent header
//
//    * An IPSet that matches the IP address 192.0.2.44
//
// You then add the Rule to a WebACL and specify that you want to block requests
// that satisfy the Rule. For a request to be blocked, the User-Agent header
// in the request must contain the value BadBotand the request must originate
// from the IP address 192.0.2.44.
//
// To create and configure a Rule, perform the following steps:
//
// Create and update the predicates that you want to include in the Rule.
//
// Create the Rule. See CreateRule.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRule request.
//
// Submit an UpdateRule request to add predicates to the Rule.
//
// Create and update a WebACL that contains the Rule. See CreateWebACL.
//
// If you want to replace one ByteMatchSet or IPSet with another, you delete
// the existing one and add the new one.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateRule for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRule
func (c *WAF) UpdateRule(input *UpdateRuleInput) (*UpdateRuleOutput, error) {
	req, out := c.UpdateRuleRequest(input)
	return out, req.Send()
}

// UpdateRuleWithContext is the same as UpdateRule with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateRule for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateRuleWithContext(ctx aws.Context, input *UpdateRuleInput, opts ...request.Option) (*UpdateRuleOutput, error) {
	req, out := c.UpdateRuleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateRuleGroup = "UpdateRuleGroup"

// UpdateRuleGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRuleGroup operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateRuleGroup for more information on using the UpdateRuleGroup
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateRuleGroupRequest method.
//    req, resp := client.UpdateRuleGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRuleGroup
func (c *WAF) UpdateRuleGroupRequest(input *UpdateRuleGroupInput) (req *request.Request, output *UpdateRuleGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateRuleGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateRuleGroupInput{}
	}

	output = &UpdateRuleGroupOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateRuleGroup API operation for AWS WAF.
//
// Inserts or deletes ActivatedRule objects in a RuleGroup.
//
// You can only insert REGULAR rules into a rule group.
//
// You can have a maximum of ten rules per rule group.
//
// To create and configure a RuleGroup, perform the following steps:
//
// Create and update the Rules that you want to include in the RuleGroup. See
// CreateRule.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateRuleGroup request.
//
// Submit an UpdateRuleGroup request to add Rules to the RuleGroup.
//
// Create and update a WebACL that contains the RuleGroup. See CreateWebACL.
//
// If you want to replace one Rule with another, you delete the existing one
// and add the new one.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateRuleGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateRuleGroup
func (c *WAF) UpdateRuleGroup(input *UpdateRuleGroupInput) (*UpdateRuleGroupOutput, error) {
	req, out := c.UpdateRuleGroupRequest(input)
	return out, req.Send()
}

// UpdateRuleGroupWithContext is the same as UpdateRuleGroup with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateRuleGroup for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateRuleGroupWithContext(ctx aws.Context, input *UpdateRuleGroupInput, opts ...request.Option) (*UpdateRuleGroupOutput, error) {
	req, out := c.UpdateRuleGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateSizeConstraintSet = "UpdateSizeConstraintSet"

// UpdateSizeConstraintSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateSizeConstraintSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateSizeConstraintSet for more information on using the UpdateSizeConstraintSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateSizeConstraintSetRequest method.
//    req, resp := client.UpdateSizeConstraintSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateSizeConstraintSet
func (c *WAF) UpdateSizeConstraintSetRequest(input *UpdateSizeConstraintSetInput) (req *request.Request, output *UpdateSizeConstraintSetOutput) {
	op := &request.Operation{
		Name:       opUpdateSizeConstraintSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateSizeConstraintSetInput{}
	}

	output = &UpdateSizeConstraintSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateSizeConstraintSet API operation for AWS WAF.
//
// Inserts or deletes SizeConstraint objects (filters) in a SizeConstraintSet.
// For each SizeConstraint object, you specify the following values:
//
//    * Whether to insert or delete the object from the array. If you want to
//    change a SizeConstraintSetUpdate object, you delete the existing object
//    and add a new one.
//
//    * The part of a web request that you want AWS WAF to evaluate, such as
//    the length of a query string or the length of the User-Agent header.
//
//    * Whether to perform any transformations on the request, such as converting
//    it to lowercase, before checking its length. Note that transformations
//    of the request body are not supported because the AWS resource forwards
//    only the first 8192 bytes of your request to AWS WAF.
//
// You can only specify a single type of TextTransformation.
//
//    * A ComparisonOperator used for evaluating the selected part of the request
//    against the specified Size, such as equals, greater than, less than, and
//    so on.
//
//    * The length, in bytes, that you want AWS WAF to watch for in selected
//    part of the request. The length is computed after applying the transformation.
//
// For example, you can add a SizeConstraintSetUpdate object that matches web
// requests in which the length of the User-Agent header is greater than 100
// bytes. You can then configure AWS WAF to block those requests.
//
// To create and configure a SizeConstraintSet, perform the following steps:
//
// Create a SizeConstraintSet. For more information, see CreateSizeConstraintSet.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateSizeConstraintSet request.
//
// Submit an UpdateSizeConstraintSet request to specify the part of the request
// that you want AWS WAF to inspect (for example, the header or the URI) and
// the value that you want AWS WAF to watch for.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateSizeConstraintSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateSizeConstraintSet
func (c *WAF) UpdateSizeConstraintSet(input *UpdateSizeConstraintSetInput) (*UpdateSizeConstraintSetOutput, error) {
	req, out := c.UpdateSizeConstraintSetRequest(input)
	return out, req.Send()
}

// UpdateSizeConstraintSetWithContext is the same as UpdateSizeConstraintSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateSizeConstraintSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateSizeConstraintSetWithContext(ctx aws.Context, input *UpdateSizeConstraintSetInput, opts ...request.Option) (*UpdateSizeConstraintSetOutput, error) {
	req, out := c.UpdateSizeConstraintSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateSqlInjectionMatchSet = "UpdateSqlInjectionMatchSet"

// UpdateSqlInjectionMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateSqlInjectionMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateSqlInjectionMatchSet for more information on using the UpdateSqlInjectionMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateSqlInjectionMatchSetRequest method.
//    req, resp := client.UpdateSqlInjectionMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateSqlInjectionMatchSet
func (c *WAF) UpdateSqlInjectionMatchSetRequest(input *UpdateSqlInjectionMatchSetInput) (req *request.Request, output *UpdateSqlInjectionMatchSetOutput) {
	op := &request.Operation{
		Name:       opUpdateSqlInjectionMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateSqlInjectionMatchSetInput{}
	}

	output = &UpdateSqlInjectionMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateSqlInjectionMatchSet API operation for AWS WAF.
//
// Inserts or deletes SqlInjectionMatchTuple objects (filters) in a SqlInjectionMatchSet.
// For each SqlInjectionMatchTuple object, you specify the following values:
//
//    * Action: Whether to insert the object into or delete the object from
//    the array. To change a SqlInjectionMatchTuple, you delete the existing
//    object and add a new one.
//
//    * FieldToMatch: The part of web requests that you want AWS WAF to inspect
//    and, if you want AWS WAF to inspect a header or custom query parameter,
//    the name of the header or parameter.
//
//    * TextTransformation: Which text transformation, if any, to perform on
//    the web request before inspecting the request for snippets of malicious
//    SQL code.
//
// You can only specify a single type of TextTransformation.
//
// You use SqlInjectionMatchSet objects to specify which CloudFront requests
// that you want to allow, block, or count. For example, if you're receiving
// requests that contain snippets of SQL code in the query string and you want
// to block the requests, you can create a SqlInjectionMatchSet with the applicable
// settings, and then configure AWS WAF to block the requests.
//
// To create and configure a SqlInjectionMatchSet, perform the following steps:
//
// Submit a CreateSqlInjectionMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateIPSet request.
//
// Submit an UpdateSqlInjectionMatchSet request to specify the parts of web
// requests that you want AWS WAF to inspect for snippets of SQL code.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateSqlInjectionMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateSqlInjectionMatchSet
func (c *WAF) UpdateSqlInjectionMatchSet(input *UpdateSqlInjectionMatchSetInput) (*UpdateSqlInjectionMatchSetOutput, error) {
	req, out := c.UpdateSqlInjectionMatchSetRequest(input)
	return out, req.Send()
}

// UpdateSqlInjectionMatchSetWithContext is the same as UpdateSqlInjectionMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateSqlInjectionMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateSqlInjectionMatchSetWithContext(ctx aws.Context, input *UpdateSqlInjectionMatchSetInput, opts ...request.Option) (*UpdateSqlInjectionMatchSetOutput, error) {
	req, out := c.UpdateSqlInjectionMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateWebACL = "UpdateWebACL"

// UpdateWebACLRequest generates a "aws/request.Request" representing the
// client's request for the UpdateWebACL operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateWebACL for more information on using the UpdateWebACL
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateWebACLRequest method.
//    req, resp := client.UpdateWebACLRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateWebACL
func (c *WAF) UpdateWebACLRequest(input *UpdateWebACLInput) (req *request.Request, output *UpdateWebACLOutput) {
	op := &request.Operation{
		Name:       opUpdateWebACL,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateWebACLInput{}
	}

	output = &UpdateWebACLOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateWebACL API operation for AWS WAF.
//
// Inserts or deletes ActivatedRule objects in a WebACL. Each Rule identifies
// web requests that you want to allow, block, or count. When you update a WebACL,
// you specify the following values:
//
//    * A default action for the WebACL, either ALLOW or BLOCK. AWS WAF performs
//    the default action if a request doesn't match the criteria in any of the
//    Rules in a WebACL.
//
//    * The Rules that you want to add or delete. If you want to replace one
//    Rule with another, you delete the existing Rule and add the new one.
//
//    * For each Rule, whether you want AWS WAF to allow requests, block requests,
//    or count requests that match the conditions in the Rule.
//
//    * The order in which you want AWS WAF to evaluate the Rules in a WebACL.
//    If you add more than one Rule to a WebACL, AWS WAF evaluates each request
//    against the Rules in order based on the value of Priority. (The Rule that
//    has the lowest value for Priority is evaluated first.) When a web request
//    matches all the predicates (such as ByteMatchSets and IPSets) in a Rule,
//    AWS WAF immediately takes the corresponding action, allow or block, and
//    doesn't evaluate the request against the remaining Rules in the WebACL,
//    if any.
//
// To create and configure a WebACL, perform the following steps:
//
// Create and update the predicates that you want to include in Rules. For more
// information, see CreateByteMatchSet, UpdateByteMatchSet, CreateIPSet, UpdateIPSet,
// CreateSqlInjectionMatchSet, and UpdateSqlInjectionMatchSet.
//
// Create and update the Rules that you want to include in the WebACL. For more
// information, see CreateRule and UpdateRule.
//
// Create a WebACL. See CreateWebACL.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateWebACL request.
//
// Submit an UpdateWebACL request to specify the Rules that you want to include
// in the WebACL, to specify the default action, and to associate the WebACL
// with a CloudFront distribution.
//
// The ActivatedRule can be a rule group. If you specify a rule group as your
// ActivatedRule, you can exclude specific rules from that rule group.
//
// If you already have a rule group associated with a web ACL and want to submit
// an UpdateWebACL request to exclude certain rules from that rule group, you
// must first remove the rule group from the web ACL, the re-insert it again,
// specifying the excluded rules. For details, see ActivatedRule$ExcludedRules.
//
// Be aware that if you try to add a RATE_BASED rule to a web ACL without setting
// the rule type when first creating the rule, the UpdateWebACL request will
// fail because the request tries to add a REGULAR rule (the default rule type)
// with the specified ID, which does not exist.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateWebACL for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeReferencedItemException "WAFReferencedItemException"
//   The operation failed because you tried to delete an object that is still
//   in use. For example:
//
//      * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
//      * You tried to delete a Rule that is still referenced by a WebACL.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
//   * ErrCodeSubscriptionNotFoundException "WAFSubscriptionNotFoundException"
//   The specified subscription does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateWebACL
func (c *WAF) UpdateWebACL(input *UpdateWebACLInput) (*UpdateWebACLOutput, error) {
	req, out := c.UpdateWebACLRequest(input)
	return out, req.Send()
}

// UpdateWebACLWithContext is the same as UpdateWebACL with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateWebACL for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateWebACLWithContext(ctx aws.Context, input *UpdateWebACLInput, opts ...request.Option) (*UpdateWebACLOutput, error) {
	req, out := c.UpdateWebACLRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateXssMatchSet = "UpdateXssMatchSet"

// UpdateXssMatchSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateXssMatchSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateXssMatchSet for more information on using the UpdateXssMatchSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the UpdateXssMatchSetRequest method.
//    req, resp := client.UpdateXssMatchSetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateXssMatchSet
func (c *WAF) UpdateXssMatchSetRequest(input *UpdateXssMatchSetInput) (req *request.Request, output *UpdateXssMatchSetOutput) {
	op := &request.Operation{
		Name:       opUpdateXssMatchSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateXssMatchSetInput{}
	}

	output = &UpdateXssMatchSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateXssMatchSet API operation for AWS WAF.
//
// Inserts or deletes XssMatchTuple objects (filters) in an XssMatchSet. For
// each XssMatchTuple object, you specify the following values:
//
//    * Action: Whether to insert the object into or delete the object from
//    the array. To change an XssMatchTuple, you delete the existing object
//    and add a new one.
//
//    * FieldToMatch: The part of web requests that you want AWS WAF to inspect
//    and, if you want AWS WAF to inspect a header or custom query parameter,
//    the name of the header or parameter.
//
//    * TextTransformation: Which text transformation, if any, to perform on
//    the web request before inspecting the request for cross-site scripting
//    attacks.
//
// You can only specify a single type of TextTransformation.
//
// You use XssMatchSet objects to specify which CloudFront requests that you
// want to allow, block, or count. For example, if you're receiving requests
// that contain cross-site scripting attacks in the request body and you want
// to block the requests, you can create an XssMatchSet with the applicable
// settings, and then configure AWS WAF to block the requests.
//
// To create and configure an XssMatchSet, perform the following steps:
//
// Submit a CreateXssMatchSet request.
//
// Use GetChangeToken to get the change token that you provide in the ChangeToken
// parameter of an UpdateIPSet request.
//
// Submit an UpdateXssMatchSet request to specify the parts of web requests
// that you want AWS WAF to inspect for cross-site scripting attacks.
//
// For more information about how to use the AWS WAF API to allow or block HTTP
// requests, see the AWS WAF Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS WAF's
// API operation UpdateXssMatchSet for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInternalErrorException "WAFInternalErrorException"
//   The operation failed because of a system problem, even though the request
//   was valid. Retry your request.
//
//   * ErrCodeInvalidAccountException "WAFInvalidAccountException"
//   The operation failed because you tried to create, update, or delete an object
//   by using an invalid account identifier.
//
//   * ErrCodeInvalidOperationException "WAFInvalidOperationException"
//   The operation failed because there was nothing to do. For example:
//
//      * You tried to remove a Rule from a WebACL, but the Rule isn't in the
//      specified WebACL.
//
//      * You tried to remove an IP address from an IPSet, but the IP address
//      isn't in the specified IPSet.
//
//      * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple
//      isn't in the specified WebACL.
//
//      * You tried to add a Rule to a WebACL, but the Rule already exists in
//      the specified WebACL.
//
//      * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple
//      already exists in the specified WebACL.
//
//   * ErrCodeInvalidParameterException "WAFInvalidParameterException"
//   The operation failed because AWS WAF didn't recognize a parameter in the
//   request. For example:
//
//      * You specified an invalid parameter name.
//
//      * You specified an invalid value.
//
//      * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL)
//      using an action other than INSERT or DELETE.
//
//      * You tried to create a WebACL with a DefaultActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to create a RateBasedRule with a RateKey value other than
//      IP.
//
//      * You tried to update a WebACL with a WafActionType other than ALLOW,
//      BLOCK, or COUNT.
//
//      * You tried to update a ByteMatchSet with a FieldToMatchType other than
//      HEADER, METHOD, QUERY_STRING, URI, or BODY.
//
//      * You tried to update a ByteMatchSet with a Field of HEADER but no value
//      for Data.
//
//      * Your request references an ARN that is malformed, or corresponds to
//      a resource with which a web ACL cannot be associated.
//
//   * ErrCodeNonexistentContainerException "WAFNonexistentContainerException"
//   The operation failed because you tried to add an object to or delete an object
//   from another object that doesn't exist. For example:
//
//      * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
//      exist.
//
//      * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
//      that doesn't exist.
//
//      * You tried to add an IP address to or delete an IP address from an IPSet
//      that doesn't exist.
//
//      * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
//      a ByteMatchSet that doesn't exist.
//
//   * ErrCodeNonexistentItemException "WAFNonexistentItemException"
//   The operation failed because the referenced object doesn't exist.
//
//   * ErrCodeStaleDataException "WAFStaleDataException"
//   The operation failed because you tried to create, update, or delete an object
//   by using a change token that has already been used.
//
//   * ErrCodeLimitsExceededException "WAFLimitsExceededException"
//   The operation exceeds a resource limit, for example, the maximum number of
//   WebACL objects that you can create for an AWS account. For more information,
//   see Limits (https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
//   in the AWS WAF Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/UpdateXssMatchSet
func (c *WAF) UpdateXssMatchSet(input *UpdateXssMatchSetInput) (*UpdateXssMatchSetOutput, error) {
	req, out := c.UpdateXssMatchSetRequest(input)
	return out, req.Send()
}

// UpdateXssMatchSetWithContext is the same as UpdateXssMatchSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateXssMatchSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *WAF) UpdateXssMatchSetWithContext(ctx aws.Context, input *UpdateXssMatchSetInput, opts ...request.Option) (*UpdateXssMatchSetOutput, error) {
	req, out := c.UpdateXssMatchSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// The ActivatedRule object in an UpdateWebACL request specifies a Rule that
// you want to insert or delete, the priority of the Rule in the WebACL, and
// the action that you want AWS WAF to take when a web request matches the Rule
// (ALLOW, BLOCK, or COUNT).
//
// To specify whether to insert or delete a Rule, use the Action parameter in
// the WebACLUpdate data type.
type ActivatedRule struct {
	_ struct{} `type:"structure"`

	// Specifies the action that CloudFront or AWS WAF takes when a web request
	// matches the conditions in the Rule. Valid values for Action include the following:
	//
	//    * ALLOW: CloudFront responds with the requested object.
	//
	//    * BLOCK: CloudFront responds with an HTTP 403 (Forbidden) status code.
	//
	//    * COUNT: AWS WAF increments a counter of requests that match the conditions
	//    in the rule and then continues to inspect the web request based on the
	//    remaining rules in the web ACL.
	//
	// ActivatedRule|OverrideAction applies only when updating or adding a RuleGroup
	// to a WebACL. In this case, you do not use ActivatedRule|Action. For all other
	// update requests, ActivatedRule|Action is used instead of ActivatedRule|OverrideAction.
	Action *WafAction `type:"structure"`

	// An array of rules to exclude from a rule group. This is applicable only when
	// the ActivatedRule refers to a RuleGroup.
	//
	// Sometimes it is necessary to troubleshoot rule groups that are blocking traffic
	// unexpectedly (false positives). One troubleshooting technique is to identify
	// the specific rule within the rule group that is blocking the legitimate traffic
	// and then disable (exclude) that particular rule. You can exclude rules from
	// both your own rule groups and AWS Marketplace rule groups that have been
	// associated with a web ACL.
	//
	// Specifying ExcludedRules does not remove those rules from the rule group.
	// Rather, it changes the action for the rules to COUNT. Therefore, requests
	// that match an ExcludedRule are counted but not blocked. The RuleGroup owner
	// will receive COUNT metrics for each ExcludedRule.
	//
	// If you want to exclude rules from a rule group that is already associated
	// with a web ACL, perform the following steps:
	//
	// Use the AWS WAF logs to identify the IDs of the rules that you want to exclude.
	// For more information about the logs, see Logging Web ACL Traffic Information
	// (https://docs.aws.amazon.com/waf/latest/developerguide/logging.html).
	//
	// Submit an UpdateWebACL request that has two actions:
	//
	// The first action deletes the existing rule group from the web ACL. That is,
	// in the UpdateWebACL request, the first Updates:Action should be DELETE and
	// Updates:ActivatedRule:RuleId should be the rule group that contains the rules
	// that you want to exclude.
	//
	// The second action inserts the same rule group back in, but specifying the
	// rules to exclude. That is, the second Updates:Action should be INSERT, Updates:ActivatedRule:RuleId
	// should be the rule group that you just removed, and ExcludedRules should
	// contain the rules that you want to exclude.
	ExcludedRules []*ExcludedRule `type:"list"`

	// Use the OverrideAction to test your RuleGroup.
	//
	// Any rule in a RuleGroup can potentially block a request. If you set the OverrideAction
	// to None, the RuleGroup will block a request if any individual rule in the
	// RuleGroup matches the request and is configured to block that request. However
	// if you first want to test the RuleGroup, set the OverrideAction to Count.
	// The RuleGroup will then override any block action specified by individual
	// rules contained within the group. Instead of blocking matching requests,
	// those requests will be counted. You can view a record of counted requests
	// using GetSampledRequests.
	//
	// ActivatedRule|OverrideAction applies only when updating or adding a RuleGroup
	// to a WebACL. In this case you do not use ActivatedRule|Action. For all other
	// update requests, ActivatedRule|Action is used instead of ActivatedRule|OverrideAction.
	OverrideAction *WafOverrideAction `type:"structure"`

	// Specifies the order in which the Rules in a WebACL are evaluated. Rules with
	// a lower value for Priority are evaluated before Rules with a higher value.
	// The value must be a unique integer. If you add multiple Rules to a WebACL,
	// the values don't need to be consecutive.
	//
	// Priority is a required field
	Priority *int64 `type:"integer" required:"true"`

	// The RuleId for a Rule. You use RuleId to get more information about a Rule
	// (see GetRule), update a Rule (see UpdateRule), insert a Rule into a WebACL
	// or delete a one from a WebACL (see UpdateWebACL), or delete a Rule from AWS
	// WAF (see DeleteRule).
	//
	// RuleId is returned by CreateRule and by ListRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`

	// The rule type, either REGULAR, as defined by Rule, RATE_BASED, as defined
	// by RateBasedRule, or GROUP, as defined by RuleGroup. The default is REGULAR.
	// Although this field is optional, be aware that if you try to add a RATE_BASED
	// rule to a web ACL without setting the type, the UpdateWebACL request will
	// fail because the request tries to add a REGULAR rule with the specified ID,
	// which does not exist.
	Type *string `type:"string" enum:"WafRuleType"`
}

// String returns the string representation
func (s ActivatedRule) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ActivatedRule) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ActivatedRule) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ActivatedRule"}
	if s.Priority == nil {
		invalidParams.Add(request.NewErrParamRequired("Priority"))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}
	if s.Action != nil {
		if err := s.Action.Validate(); err != nil {
			invalidParams.AddNested("Action", err.(request.ErrInvalidParams))
		}
	}
	if s.ExcludedRules != nil {
		for i, v := range s.ExcludedRules {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ExcludedRules", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.OverrideAction != nil {
		if err := s.OverrideAction.Validate(); err != nil {
			invalidParams.AddNested("OverrideAction", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *ActivatedRule) SetAction(v *WafAction) *ActivatedRule {
	s.Action = v
	return s
}

// SetExcludedRules sets the ExcludedRules field's value.
func (s *ActivatedRule) SetExcludedRules(v []*ExcludedRule) *ActivatedRule {
	s.ExcludedRules = v
	return s
}

// SetOverrideAction sets the OverrideAction field's value.
func (s *ActivatedRule) SetOverrideAction(v *WafOverrideAction) *ActivatedRule {
	s.OverrideAction = v
	return s
}

// SetPriority sets the Priority field's value.
func (s *ActivatedRule) SetPriority(v int64) *ActivatedRule {
	s.Priority = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *ActivatedRule) SetRuleId(v string) *ActivatedRule {
	s.RuleId = &v
	return s
}

// SetType sets the Type field's value.
func (s *ActivatedRule) SetType(v string) *ActivatedRule {
	s.Type = &v
	return s
}

// In a GetByteMatchSet request, ByteMatchSet is a complex type that contains
// the ByteMatchSetId and Name of a ByteMatchSet, and the values that you specified
// when you updated the ByteMatchSet.
//
// A complex type that contains ByteMatchTuple objects, which specify the parts
// of web requests that you want AWS WAF to inspect and the values that you
// want AWS WAF to search for. If a ByteMatchSet contains more than one ByteMatchTuple
// object, a request needs to match the settings in only one ByteMatchTuple
// to be considered a match.
type ByteMatchSet struct {
	_ struct{} `type:"structure"`

	// The ByteMatchSetId for a ByteMatchSet. You use ByteMatchSetId to get information
	// about a ByteMatchSet (see GetByteMatchSet), update a ByteMatchSet (see UpdateByteMatchSet),
	// insert a ByteMatchSet into a Rule or delete one from a Rule (see UpdateRule),
	// and delete a ByteMatchSet from AWS WAF (see DeleteByteMatchSet).
	//
	// ByteMatchSetId is returned by CreateByteMatchSet and by ListByteMatchSets.
	//
	// ByteMatchSetId is a required field
	ByteMatchSetId *string `min:"1" type:"string" required:"true"`

	// Specifies the bytes (typically a string that corresponds with ASCII characters)
	// that you want AWS WAF to search for in web requests, the location in requests
	// that you want AWS WAF to search, and other settings.
	//
	// ByteMatchTuples is a required field
	ByteMatchTuples []*ByteMatchTuple `type:"list" required:"true"`

	// A friendly name or description of the ByteMatchSet. You can't change Name
	// after you create a ByteMatchSet.
	Name *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ByteMatchSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ByteMatchSet) GoString() string {
	return s.String()
}

// SetByteMatchSetId sets the ByteMatchSetId field's value.
func (s *ByteMatchSet) SetByteMatchSetId(v string) *ByteMatchSet {
	s.ByteMatchSetId = &v
	return s
}

// SetByteMatchTuples sets the ByteMatchTuples field's value.
func (s *ByteMatchSet) SetByteMatchTuples(v []*ByteMatchTuple) *ByteMatchSet {
	s.ByteMatchTuples = v
	return s
}

// SetName sets the Name field's value.
func (s *ByteMatchSet) SetName(v string) *ByteMatchSet {
	s.Name = &v
	return s
}

// Returned by ListByteMatchSets. Each ByteMatchSetSummary object includes the
// Name and ByteMatchSetId for one ByteMatchSet.
type ByteMatchSetSummary struct {
	_ struct{} `type:"structure"`

	// The ByteMatchSetId for a ByteMatchSet. You use ByteMatchSetId to get information
	// about a ByteMatchSet, update a ByteMatchSet, remove a ByteMatchSet from a
	// Rule, and delete a ByteMatchSet from AWS WAF.
	//
	// ByteMatchSetId is returned by CreateByteMatchSet and by ListByteMatchSets.
	//
	// ByteMatchSetId is a required field
	ByteMatchSetId *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the ByteMatchSet. You can't change Name
	// after you create a ByteMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s ByteMatchSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ByteMatchSetSummary) GoString() string {
	return s.String()
}

// SetByteMatchSetId sets the ByteMatchSetId field's value.
func (s *ByteMatchSetSummary) SetByteMatchSetId(v string) *ByteMatchSetSummary {
	s.ByteMatchSetId = &v
	return s
}

// SetName sets the Name field's value.
func (s *ByteMatchSetSummary) SetName(v string) *ByteMatchSetSummary {
	s.Name = &v
	return s
}

// In an UpdateByteMatchSet request, ByteMatchSetUpdate specifies whether to
// insert or delete a ByteMatchTuple and includes the settings for the ByteMatchTuple.
type ByteMatchSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specifies whether to insert or delete a ByteMatchTuple.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// Information about the part of a web request that you want AWS WAF to inspect
	// and the value that you want AWS WAF to search for. If you specify DELETE
	// for the value of Action, the ByteMatchTuple values must exactly match the
	// values in the ByteMatchTuple that you want to delete from the ByteMatchSet.
	//
	// ByteMatchTuple is a required field
	ByteMatchTuple *ByteMatchTuple `type:"structure" required:"true"`
}

// String returns the string representation
func (s ByteMatchSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ByteMatchSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ByteMatchSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ByteMatchSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.ByteMatchTuple == nil {
		invalidParams.Add(request.NewErrParamRequired("ByteMatchTuple"))
	}
	if s.ByteMatchTuple != nil {
		if err := s.ByteMatchTuple.Validate(); err != nil {
			invalidParams.AddNested("ByteMatchTuple", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *ByteMatchSetUpdate) SetAction(v string) *ByteMatchSetUpdate {
	s.Action = &v
	return s
}

// SetByteMatchTuple sets the ByteMatchTuple field's value.
func (s *ByteMatchSetUpdate) SetByteMatchTuple(v *ByteMatchTuple) *ByteMatchSetUpdate {
	s.ByteMatchTuple = v
	return s
}

// The bytes (typically a string that corresponds with ASCII characters) that
// you want AWS WAF to search for in web requests, the location in requests
// that you want AWS WAF to search, and other settings.
type ByteMatchTuple struct {
	_ struct{} `type:"structure"`

	// The part of a web request that you want AWS WAF to search, such as a specified
	// header or a query string. For more information, see FieldToMatch.
	//
	// FieldToMatch is a required field
	FieldToMatch *FieldToMatch `type:"structure" required:"true"`

	// Within the portion of a web request that you want to search (for example,
	// in the query string, if any), specify where you want AWS WAF to search. Valid
	// values include the following:
	//
	// CONTAINS
	//
	// The specified part of the web request must include the value of TargetString,
	// but the location doesn't matter.
	//
	// CONTAINS_WORD
	//
	// The specified part of the web request must include the value of TargetString,
	// and TargetString must contain only alphanumeric characters or underscore
	// (A-Z, a-z, 0-9, or _). In addition, TargetString must be a word, which means
	// one of the following:
	//
	//    * TargetString exactly matches the value of the specified part of the
	//    web request, such as the value of a header.
	//
	//    * TargetString is at the beginning of the specified part of the web request
	//    and is followed by a character other than an alphanumeric character or
	//    underscore (_), for example, BadBot;.
	//
	//    * TargetString is at the end of the specified part of the web request
	//    and is preceded by a character other than an alphanumeric character or
	//    underscore (_), for example, ;BadBot.
	//
	//    * TargetString is in the middle of the specified part of the web request
	//    and is preceded and followed by characters other than alphanumeric characters
	//    or underscore (_), for example, -BadBot;.
	//
	// EXACTLY
	//
	// The value of the specified part of the web request must exactly match the
	// value of TargetString.
	//
	// STARTS_WITH
	//
	// The value of TargetString must appear at the beginning of the specified part
	// of the web request.
	//
	// ENDS_WITH
	//
	// The value of TargetString must appear at the end of the specified part of
	// the web request.
	//
	// PositionalConstraint is a required field
	PositionalConstraint *string `type:"string" required:"true" enum:"PositionalConstraint"`

	// The value that you want AWS WAF to search for. AWS WAF searches for the specified
	// string in the part of web requests that you specified in FieldToMatch. The
	// maximum length of the value is 50 bytes.
	//
	// Valid values depend on the values that you specified for FieldToMatch:
	//
	//    * HEADER: The value that you want AWS WAF to search for in the request
	//    header that you specified in FieldToMatch, for example, the value of the
	//    User-Agent or Referer header.
	//
	//    * METHOD: The HTTP method, which indicates the type of operation specified
	//    in the request. CloudFront supports the following methods: DELETE, GET,
	//    HEAD, OPTIONS, PATCH, POST, and PUT.
	//
	//    * QUERY_STRING: The value that you want AWS WAF to search for in the query
	//    string, which is the part of a URL that appears after a ? character.
	//
	//    * URI: The value that you want AWS WAF to search for in the part of a
	//    URL that identifies a resource, for example, /images/daily-ad.jpg.
	//
	//    * BODY: The part of a request that contains any additional data that you
	//    want to send to your web server as the HTTP request body, such as data
	//    from a form. The request body immediately follows the request headers.
	//    Note that only the first 8192 bytes of the request body are forwarded
	//    to AWS WAF for inspection. To allow or block requests based on the length
	//    of the body, you can create a size constraint set. For more information,
	//    see CreateSizeConstraintSet.
	//
	//    * SINGLE_QUERY_ARG: The parameter in the query string that you will inspect,
	//    such as UserName or SalesRegion. The maximum length for SINGLE_QUERY_ARG
	//    is 30 characters.
	//
	//    * ALL_QUERY_ARGS: Similar to SINGLE_QUERY_ARG, but instead of inspecting
	//    a single parameter, AWS WAF inspects all parameters within the query string
	//    for the value or regex pattern that you specify in TargetString.
	//
	// If TargetString includes alphabetic characters A-Z and a-z, note that the
	// value is case sensitive.
	//
	// If you're using the AWS WAF API
	//
	// Specify a base64-encoded version of the value. The maximum length of the
	// value before you base64-encode it is 50 bytes.
	//
	// For example, suppose the value of Type is HEADER and the value of Data is
	// User-Agent. If you want to search the User-Agent header for the value BadBot,
	// you base64-encode BadBot using MIME base64-encoding and include the resulting
	// value, QmFkQm90, in the value of TargetString.
	//
	// If you're using the AWS CLI or one of the AWS SDKs
	//
	// The value that you want AWS WAF to search for. The SDK automatically base64
	// encodes the value.
	//
	// TargetString is automatically base64 encoded/decoded by the SDK.
	//
	// TargetString is a required field
	TargetString []byte `type:"blob" required:"true"`

	// Text transformations eliminate some of the unusual formatting that attackers
	// use in web requests in an effort to bypass AWS WAF. If you specify a transformation,
	// AWS WAF performs the transformation on TargetString before inspecting a request
	// for a match.
	//
	// You can only specify a single type of TextTransformation.
	//
	// CMD_LINE
	//
	// When you're concerned that attackers are injecting an operating system command
	// line command and using unusual formatting to disguise some or all of the
	// command, use this option to perform the following transformations:
	//
	//    * Delete the following characters: \ " ' ^
	//
	//    * Delete spaces before the following characters: / (
	//
	//    * Replace the following characters with a space: , ;
	//
	//    * Replace multiple spaces with one space
	//
	//    * Convert uppercase letters (A-Z) to lowercase (a-z)
	//
	// COMPRESS_WHITE_SPACE
	//
	// Use this option to replace the following characters with a space character
	// (decimal 32):
	//
	//    * \f, formfeed, decimal 12
	//
	//    * \t, tab, decimal 9
	//
	//    * \n, newline, decimal 10
	//
	//    * \r, carriage return, decimal 13
	//
	//    * \v, vertical tab, decimal 11
	//
	//    * non-breaking space, decimal 160
	//
	// COMPRESS_WHITE_SPACE also replaces multiple spaces with one space.
	//
	// HTML_ENTITY_DECODE
	//
	// Use this option to replace HTML-encoded characters with unencoded characters.
	// HTML_ENTITY_DECODE performs the following operations:
	//
	//    * Replaces (ampersand)quot; with "
	//
	//    * Replaces (ampersand)nbsp; with a non-breaking space, decimal 160
	//
	//    * Replaces (ampersand)lt; with a "less than" symbol
	//
	//    * Replaces (ampersand)gt; with >
	//
	//    * Replaces characters that are represented in hexadecimal format, (ampersand)#xhhhh;,
	//    with the corresponding characters
	//
	//    * Replaces characters that are represented in decimal format, (ampersand)#nnnn;,
	//    with the corresponding characters
	//
	// LOWERCASE
	//
	// Use this option to convert uppercase letters (A-Z) to lowercase (a-z).
	//
	// URL_DECODE
	//
	// Use this option to decode a URL-encoded value.
	//
	// NONE
	//
	// Specify NONE if you don't want to perform any text transformations.
	//
	// TextTransformation is a required field
	TextTransformation *string `type:"string" required:"true" enum:"TextTransformation"`
}

// String returns the string representation
func (s ByteMatchTuple) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ByteMatchTuple) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ByteMatchTuple) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ByteMatchTuple"}
	if s.FieldToMatch == nil {
		invalidParams.Add(request.NewErrParamRequired("FieldToMatch"))
	}
	if s.PositionalConstraint == nil {
		invalidParams.Add(request.NewErrParamRequired("PositionalConstraint"))
	}
	if s.TargetString == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetString"))
	}
	if s.TextTransformation == nil {
		invalidParams.Add(request.NewErrParamRequired("TextTransformation"))
	}
	if s.FieldToMatch != nil {
		if err := s.FieldToMatch.Validate(); err != nil {
			invalidParams.AddNested("FieldToMatch", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFieldToMatch sets the FieldToMatch field's value.
func (s *ByteMatchTuple) SetFieldToMatch(v *FieldToMatch) *ByteMatchTuple {
	s.FieldToMatch = v
	return s
}

// SetPositionalConstraint sets the PositionalConstraint field's value.
func (s *ByteMatchTuple) SetPositionalConstraint(v string) *ByteMatchTuple {
	s.PositionalConstraint = &v
	return s
}

// SetTargetString sets the TargetString field's value.
func (s *ByteMatchTuple) SetTargetString(v []byte) *ByteMatchTuple {
	s.TargetString = v
	return s
}

// SetTextTransformation sets the TextTransformation field's value.
func (s *ByteMatchTuple) SetTextTransformation(v string) *ByteMatchTuple {
	s.TextTransformation = &v
	return s
}

type CreateByteMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the ByteMatchSet. You can't change Name
	// after you create a ByteMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateByteMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateByteMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateByteMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateByteMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateByteMatchSetInput) SetChangeToken(v string) *CreateByteMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateByteMatchSetInput) SetName(v string) *CreateByteMatchSetInput {
	s.Name = &v
	return s
}

type CreateByteMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// A ByteMatchSet that contains no ByteMatchTuple objects.
	ByteMatchSet *ByteMatchSet `type:"structure"`

	// The ChangeToken that you used to submit the CreateByteMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s CreateByteMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateByteMatchSetOutput) GoString() string {
	return s.String()
}

// SetByteMatchSet sets the ByteMatchSet field's value.
func (s *CreateByteMatchSetOutput) SetByteMatchSet(v *ByteMatchSet) *CreateByteMatchSetOutput {
	s.ByteMatchSet = v
	return s
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateByteMatchSetOutput) SetChangeToken(v string) *CreateByteMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type CreateGeoMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the GeoMatchSet. You can't change Name
	// after you create the GeoMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateGeoMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateGeoMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateGeoMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateGeoMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateGeoMatchSetInput) SetChangeToken(v string) *CreateGeoMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateGeoMatchSetInput) SetName(v string) *CreateGeoMatchSetInput {
	s.Name = &v
	return s
}

type CreateGeoMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateGeoMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// The GeoMatchSet returned in the CreateGeoMatchSet response. The GeoMatchSet
	// contains no GeoMatchConstraints.
	GeoMatchSet *GeoMatchSet `type:"structure"`
}

// String returns the string representation
func (s CreateGeoMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateGeoMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateGeoMatchSetOutput) SetChangeToken(v string) *CreateGeoMatchSetOutput {
	s.ChangeToken = &v
	return s
}

// SetGeoMatchSet sets the GeoMatchSet field's value.
func (s *CreateGeoMatchSetOutput) SetGeoMatchSet(v *GeoMatchSet) *CreateGeoMatchSetOutput {
	s.GeoMatchSet = v
	return s
}

type CreateIPSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the IPSet. You can't change Name after
	// you create the IPSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateIPSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateIPSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateIPSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateIPSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateIPSetInput) SetChangeToken(v string) *CreateIPSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateIPSetInput) SetName(v string) *CreateIPSetInput {
	s.Name = &v
	return s
}

type CreateIPSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateIPSet request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// The IPSet returned in the CreateIPSet response.
	IPSet *IPSet `type:"structure"`
}

// String returns the string representation
func (s CreateIPSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateIPSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateIPSetOutput) SetChangeToken(v string) *CreateIPSetOutput {
	s.ChangeToken = &v
	return s
}

// SetIPSet sets the IPSet field's value.
func (s *CreateIPSetOutput) SetIPSet(v *IPSet) *CreateIPSetOutput {
	s.IPSet = v
	return s
}

type CreateRateBasedRuleInput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateRateBasedRule request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description for the metrics for this RateBasedRule. The
	// name can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain whitespace. You can't change the name of the metric after you create
	// the RateBasedRule.
	//
	// MetricName is a required field
	MetricName *string `type:"string" required:"true"`

	// A friendly name or description of the RateBasedRule. You can't change the
	// name of a RateBasedRule after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The field that AWS WAF uses to determine if requests are likely arriving
	// from a single source and thus subject to rate monitoring. The only valid
	// value for RateKey is IP. IP indicates that requests that arrive from the
	// same IP address are subject to the RateLimit that is specified in the RateBasedRule.
	//
	// RateKey is a required field
	RateKey *string `type:"string" required:"true" enum:"RateKey"`

	// The maximum number of requests, which have an identical value in the field
	// that is specified by RateKey, allowed in a five-minute period. If the number
	// of requests exceeds the RateLimit and the other predicates specified in the
	// rule are also met, AWS WAF triggers the action that is specified for this
	// rule.
	//
	// RateLimit is a required field
	RateLimit *int64 `min:"2000" type:"long" required:"true"`
}

// String returns the string representation
func (s CreateRateBasedRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRateBasedRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateRateBasedRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateRateBasedRuleInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.RateKey == nil {
		invalidParams.Add(request.NewErrParamRequired("RateKey"))
	}
	if s.RateLimit == nil {
		invalidParams.Add(request.NewErrParamRequired("RateLimit"))
	}
	if s.RateLimit != nil && *s.RateLimit < 2000 {
		invalidParams.Add(request.NewErrParamMinValue("RateLimit", 2000))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRateBasedRuleInput) SetChangeToken(v string) *CreateRateBasedRuleInput {
	s.ChangeToken = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *CreateRateBasedRuleInput) SetMetricName(v string) *CreateRateBasedRuleInput {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateRateBasedRuleInput) SetName(v string) *CreateRateBasedRuleInput {
	s.Name = &v
	return s
}

// SetRateKey sets the RateKey field's value.
func (s *CreateRateBasedRuleInput) SetRateKey(v string) *CreateRateBasedRuleInput {
	s.RateKey = &v
	return s
}

// SetRateLimit sets the RateLimit field's value.
func (s *CreateRateBasedRuleInput) SetRateLimit(v int64) *CreateRateBasedRuleInput {
	s.RateLimit = &v
	return s
}

type CreateRateBasedRuleOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateRateBasedRule request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// The RateBasedRule that is returned in the CreateRateBasedRule response.
	Rule *RateBasedRule `type:"structure"`
}

// String returns the string representation
func (s CreateRateBasedRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRateBasedRuleOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRateBasedRuleOutput) SetChangeToken(v string) *CreateRateBasedRuleOutput {
	s.ChangeToken = &v
	return s
}

// SetRule sets the Rule field's value.
func (s *CreateRateBasedRuleOutput) SetRule(v *RateBasedRule) *CreateRateBasedRuleOutput {
	s.Rule = v
	return s
}

type CreateRegexMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the RegexMatchSet. You can't change Name
	// after you create a RegexMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateRegexMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRegexMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateRegexMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateRegexMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRegexMatchSetInput) SetChangeToken(v string) *CreateRegexMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateRegexMatchSetInput) SetName(v string) *CreateRegexMatchSetInput {
	s.Name = &v
	return s
}

type CreateRegexMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateRegexMatchSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// A RegexMatchSet that contains no RegexMatchTuple objects.
	RegexMatchSet *RegexMatchSet `type:"structure"`
}

// String returns the string representation
func (s CreateRegexMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRegexMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRegexMatchSetOutput) SetChangeToken(v string) *CreateRegexMatchSetOutput {
	s.ChangeToken = &v
	return s
}

// SetRegexMatchSet sets the RegexMatchSet field's value.
func (s *CreateRegexMatchSetOutput) SetRegexMatchSet(v *RegexMatchSet) *CreateRegexMatchSetOutput {
	s.RegexMatchSet = v
	return s
}

type CreateRegexPatternSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the RegexPatternSet. You can't change Name
	// after you create a RegexPatternSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateRegexPatternSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRegexPatternSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateRegexPatternSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateRegexPatternSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRegexPatternSetInput) SetChangeToken(v string) *CreateRegexPatternSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateRegexPatternSetInput) SetName(v string) *CreateRegexPatternSetInput {
	s.Name = &v
	return s
}

type CreateRegexPatternSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateRegexPatternSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// A RegexPatternSet that contains no objects.
	RegexPatternSet *RegexPatternSet `type:"structure"`
}

// String returns the string representation
func (s CreateRegexPatternSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRegexPatternSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRegexPatternSetOutput) SetChangeToken(v string) *CreateRegexPatternSetOutput {
	s.ChangeToken = &v
	return s
}

// SetRegexPatternSet sets the RegexPatternSet field's value.
func (s *CreateRegexPatternSetOutput) SetRegexPatternSet(v *RegexPatternSet) *CreateRegexPatternSetOutput {
	s.RegexPatternSet = v
	return s
}

type CreateRuleGroupInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description for the metrics for this RuleGroup. The name
	// can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain whitespace. You can't change the name of the metric after you create
	// the RuleGroup.
	//
	// MetricName is a required field
	MetricName *string `type:"string" required:"true"`

	// A friendly name or description of the RuleGroup. You can't change Name after
	// you create a RuleGroup.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateRuleGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRuleGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateRuleGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateRuleGroupInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRuleGroupInput) SetChangeToken(v string) *CreateRuleGroupInput {
	s.ChangeToken = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *CreateRuleGroupInput) SetMetricName(v string) *CreateRuleGroupInput {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateRuleGroupInput) SetName(v string) *CreateRuleGroupInput {
	s.Name = &v
	return s
}

type CreateRuleGroupOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateRuleGroup request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// An empty RuleGroup.
	RuleGroup *RuleGroup `type:"structure"`
}

// String returns the string representation
func (s CreateRuleGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRuleGroupOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRuleGroupOutput) SetChangeToken(v string) *CreateRuleGroupOutput {
	s.ChangeToken = &v
	return s
}

// SetRuleGroup sets the RuleGroup field's value.
func (s *CreateRuleGroupOutput) SetRuleGroup(v *RuleGroup) *CreateRuleGroupOutput {
	s.RuleGroup = v
	return s
}

type CreateRuleInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description for the metrics for this Rule. The name can
	// contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't contain
	// white space. You can't change the name of the metric after you create the
	// Rule.
	//
	// MetricName is a required field
	MetricName *string `type:"string" required:"true"`

	// A friendly name or description of the Rule. You can't change the name of
	// a Rule after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateRuleInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRuleInput) SetChangeToken(v string) *CreateRuleInput {
	s.ChangeToken = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *CreateRuleInput) SetMetricName(v string) *CreateRuleInput {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateRuleInput) SetName(v string) *CreateRuleInput {
	s.Name = &v
	return s
}

type CreateRuleOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateRule request. You can also
	// use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// The Rule returned in the CreateRule response.
	Rule *Rule `type:"structure"`
}

// String returns the string representation
func (s CreateRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateRuleOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateRuleOutput) SetChangeToken(v string) *CreateRuleOutput {
	s.ChangeToken = &v
	return s
}

// SetRule sets the Rule field's value.
func (s *CreateRuleOutput) SetRule(v *Rule) *CreateRuleOutput {
	s.Rule = v
	return s
}

type CreateSizeConstraintSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the SizeConstraintSet. You can't change
	// Name after you create a SizeConstraintSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateSizeConstraintSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateSizeConstraintSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateSizeConstraintSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateSizeConstraintSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateSizeConstraintSetInput) SetChangeToken(v string) *CreateSizeConstraintSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateSizeConstraintSetInput) SetName(v string) *CreateSizeConstraintSetInput {
	s.Name = &v
	return s
}

type CreateSizeConstraintSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateSizeConstraintSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// A SizeConstraintSet that contains no SizeConstraint objects.
	SizeConstraintSet *SizeConstraintSet `type:"structure"`
}

// String returns the string representation
func (s CreateSizeConstraintSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateSizeConstraintSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateSizeConstraintSetOutput) SetChangeToken(v string) *CreateSizeConstraintSetOutput {
	s.ChangeToken = &v
	return s
}

// SetSizeConstraintSet sets the SizeConstraintSet field's value.
func (s *CreateSizeConstraintSetOutput) SetSizeConstraintSet(v *SizeConstraintSet) *CreateSizeConstraintSetOutput {
	s.SizeConstraintSet = v
	return s
}

// A request to create a SqlInjectionMatchSet.
type CreateSqlInjectionMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description for the SqlInjectionMatchSet that you're creating.
	// You can't change Name after you create the SqlInjectionMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateSqlInjectionMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateSqlInjectionMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateSqlInjectionMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateSqlInjectionMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateSqlInjectionMatchSetInput) SetChangeToken(v string) *CreateSqlInjectionMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateSqlInjectionMatchSetInput) SetName(v string) *CreateSqlInjectionMatchSetInput {
	s.Name = &v
	return s
}

// The response to a CreateSqlInjectionMatchSet request.
type CreateSqlInjectionMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateSqlInjectionMatchSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// A SqlInjectionMatchSet.
	SqlInjectionMatchSet *SqlInjectionMatchSet `type:"structure"`
}

// String returns the string representation
func (s CreateSqlInjectionMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateSqlInjectionMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateSqlInjectionMatchSetOutput) SetChangeToken(v string) *CreateSqlInjectionMatchSetOutput {
	s.ChangeToken = &v
	return s
}

// SetSqlInjectionMatchSet sets the SqlInjectionMatchSet field's value.
func (s *CreateSqlInjectionMatchSetOutput) SetSqlInjectionMatchSet(v *SqlInjectionMatchSet) *CreateSqlInjectionMatchSetOutput {
	s.SqlInjectionMatchSet = v
	return s
}

type CreateWebACLInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The action that you want AWS WAF to take when a request doesn't match the
	// criteria specified in any of the Rule objects that are associated with the
	// WebACL.
	//
	// DefaultAction is a required field
	DefaultAction *WafAction `type:"structure" required:"true"`

	// A friendly name or description for the metrics for this WebACL. The name
	// can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain white space. You can't change MetricName after you create the WebACL.
	//
	// MetricName is a required field
	MetricName *string `type:"string" required:"true"`

	// A friendly name or description of the WebACL. You can't change Name after
	// you create the WebACL.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateWebACLInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateWebACLInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateWebACLInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateWebACLInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.DefaultAction == nil {
		invalidParams.Add(request.NewErrParamRequired("DefaultAction"))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.DefaultAction != nil {
		if err := s.DefaultAction.Validate(); err != nil {
			invalidParams.AddNested("DefaultAction", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateWebACLInput) SetChangeToken(v string) *CreateWebACLInput {
	s.ChangeToken = &v
	return s
}

// SetDefaultAction sets the DefaultAction field's value.
func (s *CreateWebACLInput) SetDefaultAction(v *WafAction) *CreateWebACLInput {
	s.DefaultAction = v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *CreateWebACLInput) SetMetricName(v string) *CreateWebACLInput {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateWebACLInput) SetName(v string) *CreateWebACLInput {
	s.Name = &v
	return s
}

type CreateWebACLOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateWebACL request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// The WebACL returned in the CreateWebACL response.
	WebACL *WebACL `type:"structure"`
}

// String returns the string representation
func (s CreateWebACLOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateWebACLOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateWebACLOutput) SetChangeToken(v string) *CreateWebACLOutput {
	s.ChangeToken = &v
	return s
}

// SetWebACL sets the WebACL field's value.
func (s *CreateWebACLOutput) SetWebACL(v *WebACL) *CreateWebACLOutput {
	s.WebACL = v
	return s
}

// A request to create an XssMatchSet.
type CreateXssMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A friendly name or description for the XssMatchSet that you're creating.
	// You can't change Name after you create the XssMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateXssMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateXssMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateXssMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateXssMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateXssMatchSetInput) SetChangeToken(v string) *CreateXssMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetName sets the Name field's value.
func (s *CreateXssMatchSetInput) SetName(v string) *CreateXssMatchSetInput {
	s.Name = &v
	return s
}

// The response to a CreateXssMatchSet request.
type CreateXssMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the CreateXssMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`

	// An XssMatchSet.
	XssMatchSet *XssMatchSet `type:"structure"`
}

// String returns the string representation
func (s CreateXssMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateXssMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *CreateXssMatchSetOutput) SetChangeToken(v string) *CreateXssMatchSetOutput {
	s.ChangeToken = &v
	return s
}

// SetXssMatchSet sets the XssMatchSet field's value.
func (s *CreateXssMatchSetOutput) SetXssMatchSet(v *XssMatchSet) *CreateXssMatchSetOutput {
	s.XssMatchSet = v
	return s
}

type DeleteByteMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The ByteMatchSetId of the ByteMatchSet that you want to delete. ByteMatchSetId
	// is returned by CreateByteMatchSet and by ListByteMatchSets.
	//
	// ByteMatchSetId is a required field
	ByteMatchSetId *string `min:"1" type:"string" required:"true"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteByteMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteByteMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteByteMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteByteMatchSetInput"}
	if s.ByteMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("ByteMatchSetId"))
	}
	if s.ByteMatchSetId != nil && len(*s.ByteMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ByteMatchSetId", 1))
	}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetByteMatchSetId sets the ByteMatchSetId field's value.
func (s *DeleteByteMatchSetInput) SetByteMatchSetId(v string) *DeleteByteMatchSetInput {
	s.ByteMatchSetId = &v
	return s
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteByteMatchSetInput) SetChangeToken(v string) *DeleteByteMatchSetInput {
	s.ChangeToken = &v
	return s
}

type DeleteByteMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteByteMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteByteMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteByteMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteByteMatchSetOutput) SetChangeToken(v string) *DeleteByteMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type DeleteGeoMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The GeoMatchSetID of the GeoMatchSet that you want to delete. GeoMatchSetId
	// is returned by CreateGeoMatchSet and by ListGeoMatchSets.
	//
	// GeoMatchSetId is a required field
	GeoMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteGeoMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteGeoMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteGeoMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteGeoMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.GeoMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("GeoMatchSetId"))
	}
	if s.GeoMatchSetId != nil && len(*s.GeoMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GeoMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteGeoMatchSetInput) SetChangeToken(v string) *DeleteGeoMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetGeoMatchSetId sets the GeoMatchSetId field's value.
func (s *DeleteGeoMatchSetInput) SetGeoMatchSetId(v string) *DeleteGeoMatchSetInput {
	s.GeoMatchSetId = &v
	return s
}

type DeleteGeoMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteGeoMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteGeoMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteGeoMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteGeoMatchSetOutput) SetChangeToken(v string) *DeleteGeoMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type DeleteIPSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The IPSetId of the IPSet that you want to delete. IPSetId is returned by
	// CreateIPSet and by ListIPSets.
	//
	// IPSetId is a required field
	IPSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteIPSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteIPSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteIPSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteIPSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.IPSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("IPSetId"))
	}
	if s.IPSetId != nil && len(*s.IPSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IPSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteIPSetInput) SetChangeToken(v string) *DeleteIPSetInput {
	s.ChangeToken = &v
	return s
}

// SetIPSetId sets the IPSetId field's value.
func (s *DeleteIPSetInput) SetIPSetId(v string) *DeleteIPSetInput {
	s.IPSetId = &v
	return s
}

type DeleteIPSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteIPSet request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteIPSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteIPSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteIPSetOutput) SetChangeToken(v string) *DeleteIPSetOutput {
	s.ChangeToken = &v
	return s
}

type DeleteLoggingConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the web ACL from which you want to delete
	// the LoggingConfiguration.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteLoggingConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteLoggingConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteLoggingConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteLoggingConfigurationInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *DeleteLoggingConfigurationInput) SetResourceArn(v string) *DeleteLoggingConfigurationInput {
	s.ResourceArn = &v
	return s
}

type DeleteLoggingConfigurationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeleteLoggingConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteLoggingConfigurationOutput) GoString() string {
	return s.String()
}

type DeletePermissionPolicyInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the RuleGroup from which you want to delete
	// the policy.
	//
	// The user making the request must be the owner of the RuleGroup.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeletePermissionPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeletePermissionPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeletePermissionPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeletePermissionPolicyInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *DeletePermissionPolicyInput) SetResourceArn(v string) *DeletePermissionPolicyInput {
	s.ResourceArn = &v
	return s
}

type DeletePermissionPolicyOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeletePermissionPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeletePermissionPolicyOutput) GoString() string {
	return s.String()
}

type DeleteRateBasedRuleInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RuleId of the RateBasedRule that you want to delete. RuleId is returned
	// by CreateRateBasedRule and by ListRateBasedRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteRateBasedRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRateBasedRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteRateBasedRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteRateBasedRuleInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRateBasedRuleInput) SetChangeToken(v string) *DeleteRateBasedRuleInput {
	s.ChangeToken = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *DeleteRateBasedRuleInput) SetRuleId(v string) *DeleteRateBasedRuleInput {
	s.RuleId = &v
	return s
}

type DeleteRateBasedRuleOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteRateBasedRule request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteRateBasedRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRateBasedRuleOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRateBasedRuleOutput) SetChangeToken(v string) *DeleteRateBasedRuleOutput {
	s.ChangeToken = &v
	return s
}

type DeleteRegexMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RegexMatchSetId of the RegexMatchSet that you want to delete. RegexMatchSetId
	// is returned by CreateRegexMatchSet and by ListRegexMatchSets.
	//
	// RegexMatchSetId is a required field
	RegexMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteRegexMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRegexMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteRegexMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteRegexMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RegexMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexMatchSetId"))
	}
	if s.RegexMatchSetId != nil && len(*s.RegexMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRegexMatchSetInput) SetChangeToken(v string) *DeleteRegexMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetRegexMatchSetId sets the RegexMatchSetId field's value.
func (s *DeleteRegexMatchSetInput) SetRegexMatchSetId(v string) *DeleteRegexMatchSetInput {
	s.RegexMatchSetId = &v
	return s
}

type DeleteRegexMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteRegexMatchSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteRegexMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRegexMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRegexMatchSetOutput) SetChangeToken(v string) *DeleteRegexMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type DeleteRegexPatternSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RegexPatternSetId of the RegexPatternSet that you want to delete. RegexPatternSetId
	// is returned by CreateRegexPatternSet and by ListRegexPatternSets.
	//
	// RegexPatternSetId is a required field
	RegexPatternSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteRegexPatternSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRegexPatternSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteRegexPatternSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteRegexPatternSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RegexPatternSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexPatternSetId"))
	}
	if s.RegexPatternSetId != nil && len(*s.RegexPatternSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexPatternSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRegexPatternSetInput) SetChangeToken(v string) *DeleteRegexPatternSetInput {
	s.ChangeToken = &v
	return s
}

// SetRegexPatternSetId sets the RegexPatternSetId field's value.
func (s *DeleteRegexPatternSetInput) SetRegexPatternSetId(v string) *DeleteRegexPatternSetInput {
	s.RegexPatternSetId = &v
	return s
}

type DeleteRegexPatternSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteRegexPatternSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteRegexPatternSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRegexPatternSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRegexPatternSetOutput) SetChangeToken(v string) *DeleteRegexPatternSetOutput {
	s.ChangeToken = &v
	return s
}

type DeleteRuleGroupInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RuleGroupId of the RuleGroup that you want to delete. RuleGroupId is
	// returned by CreateRuleGroup and by ListRuleGroups.
	//
	// RuleGroupId is a required field
	RuleGroupId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteRuleGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRuleGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteRuleGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteRuleGroupInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RuleGroupId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleGroupId"))
	}
	if s.RuleGroupId != nil && len(*s.RuleGroupId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleGroupId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRuleGroupInput) SetChangeToken(v string) *DeleteRuleGroupInput {
	s.ChangeToken = &v
	return s
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *DeleteRuleGroupInput) SetRuleGroupId(v string) *DeleteRuleGroupInput {
	s.RuleGroupId = &v
	return s
}

type DeleteRuleGroupOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteRuleGroup request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteRuleGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRuleGroupOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRuleGroupOutput) SetChangeToken(v string) *DeleteRuleGroupOutput {
	s.ChangeToken = &v
	return s
}

type DeleteRuleInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RuleId of the Rule that you want to delete. RuleId is returned by CreateRule
	// and by ListRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteRuleInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRuleInput) SetChangeToken(v string) *DeleteRuleInput {
	s.ChangeToken = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *DeleteRuleInput) SetRuleId(v string) *DeleteRuleInput {
	s.RuleId = &v
	return s
}

type DeleteRuleOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteRule request. You can also
	// use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteRuleOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteRuleOutput) SetChangeToken(v string) *DeleteRuleOutput {
	s.ChangeToken = &v
	return s
}

type DeleteSizeConstraintSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The SizeConstraintSetId of the SizeConstraintSet that you want to delete.
	// SizeConstraintSetId is returned by CreateSizeConstraintSet and by ListSizeConstraintSets.
	//
	// SizeConstraintSetId is a required field
	SizeConstraintSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteSizeConstraintSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteSizeConstraintSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteSizeConstraintSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteSizeConstraintSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.SizeConstraintSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("SizeConstraintSetId"))
	}
	if s.SizeConstraintSetId != nil && len(*s.SizeConstraintSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SizeConstraintSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteSizeConstraintSetInput) SetChangeToken(v string) *DeleteSizeConstraintSetInput {
	s.ChangeToken = &v
	return s
}

// SetSizeConstraintSetId sets the SizeConstraintSetId field's value.
func (s *DeleteSizeConstraintSetInput) SetSizeConstraintSetId(v string) *DeleteSizeConstraintSetInput {
	s.SizeConstraintSetId = &v
	return s
}

type DeleteSizeConstraintSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteSizeConstraintSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteSizeConstraintSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteSizeConstraintSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteSizeConstraintSetOutput) SetChangeToken(v string) *DeleteSizeConstraintSetOutput {
	s.ChangeToken = &v
	return s
}

// A request to delete a SqlInjectionMatchSet from AWS WAF.
type DeleteSqlInjectionMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The SqlInjectionMatchSetId of the SqlInjectionMatchSet that you want to delete.
	// SqlInjectionMatchSetId is returned by CreateSqlInjectionMatchSet and by ListSqlInjectionMatchSets.
	//
	// SqlInjectionMatchSetId is a required field
	SqlInjectionMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteSqlInjectionMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteSqlInjectionMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteSqlInjectionMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteSqlInjectionMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.SqlInjectionMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("SqlInjectionMatchSetId"))
	}
	if s.SqlInjectionMatchSetId != nil && len(*s.SqlInjectionMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SqlInjectionMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteSqlInjectionMatchSetInput) SetChangeToken(v string) *DeleteSqlInjectionMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetSqlInjectionMatchSetId sets the SqlInjectionMatchSetId field's value.
func (s *DeleteSqlInjectionMatchSetInput) SetSqlInjectionMatchSetId(v string) *DeleteSqlInjectionMatchSetInput {
	s.SqlInjectionMatchSetId = &v
	return s
}

// The response to a request to delete a SqlInjectionMatchSet from AWS WAF.
type DeleteSqlInjectionMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteSqlInjectionMatchSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteSqlInjectionMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteSqlInjectionMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteSqlInjectionMatchSetOutput) SetChangeToken(v string) *DeleteSqlInjectionMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type DeleteWebACLInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The WebACLId of the WebACL that you want to delete. WebACLId is returned
	// by CreateWebACL and by ListWebACLs.
	//
	// WebACLId is a required field
	WebACLId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteWebACLInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteWebACLInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteWebACLInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteWebACLInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.WebACLId == nil {
		invalidParams.Add(request.NewErrParamRequired("WebACLId"))
	}
	if s.WebACLId != nil && len(*s.WebACLId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("WebACLId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteWebACLInput) SetChangeToken(v string) *DeleteWebACLInput {
	s.ChangeToken = &v
	return s
}

// SetWebACLId sets the WebACLId field's value.
func (s *DeleteWebACLInput) SetWebACLId(v string) *DeleteWebACLInput {
	s.WebACLId = &v
	return s
}

type DeleteWebACLOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteWebACL request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteWebACLOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteWebACLOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteWebACLOutput) SetChangeToken(v string) *DeleteWebACLOutput {
	s.ChangeToken = &v
	return s
}

// A request to delete an XssMatchSet from AWS WAF.
type DeleteXssMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The XssMatchSetId of the XssMatchSet that you want to delete. XssMatchSetId
	// is returned by CreateXssMatchSet and by ListXssMatchSets.
	//
	// XssMatchSetId is a required field
	XssMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteXssMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteXssMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteXssMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteXssMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.XssMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("XssMatchSetId"))
	}
	if s.XssMatchSetId != nil && len(*s.XssMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("XssMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteXssMatchSetInput) SetChangeToken(v string) *DeleteXssMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetXssMatchSetId sets the XssMatchSetId field's value.
func (s *DeleteXssMatchSetInput) SetXssMatchSetId(v string) *DeleteXssMatchSetInput {
	s.XssMatchSetId = &v
	return s
}

// The response to a request to delete an XssMatchSet from AWS WAF.
type DeleteXssMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the DeleteXssMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s DeleteXssMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteXssMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *DeleteXssMatchSetOutput) SetChangeToken(v string) *DeleteXssMatchSetOutput {
	s.ChangeToken = &v
	return s
}

// The rule to exclude from a rule group. This is applicable only when the ActivatedRule
// refers to a RuleGroup. The rule must belong to the RuleGroup that is specified
// by the ActivatedRule.
type ExcludedRule struct {
	_ struct{} `type:"structure"`

	// The unique identifier for the rule to exclude from the rule group.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s ExcludedRule) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ExcludedRule) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ExcludedRule) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ExcludedRule"}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleId sets the RuleId field's value.
func (s *ExcludedRule) SetRuleId(v string) *ExcludedRule {
	s.RuleId = &v
	return s
}

// Specifies where in a web request to look for TargetString.
type FieldToMatch struct {
	_ struct{} `type:"structure"`

	// When the value of Type is HEADER, enter the name of the header that you want
	// AWS WAF to search, for example, User-Agent or Referer. The name of the header
	// is not case sensitive.
	//
	// When the value of Type is SINGLE_QUERY_ARG, enter the name of the parameter
	// that you want AWS WAF to search, for example, UserName or SalesRegion. The
	// parameter name is not case sensitive.
	//
	// If the value of Type is any other value, omit Data.
	Data *string `type:"string"`

	// The part of the web request that you want AWS WAF to search for a specified
	// string. Parts of a request that you can search include the following:
	//
	//    * HEADER: A specified request header, for example, the value of the User-Agent
	//    or Referer header. If you choose HEADER for the type, specify the name
	//    of the header in Data.
	//
	//    * METHOD: The HTTP method, which indicated the type of operation that
	//    the request is asking the origin to perform. Amazon CloudFront supports
	//    the following methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, and PUT.
	//
	//    * QUERY_STRING: A query string, which is the part of a URL that appears
	//    after a ? character, if any.
	//
	//    * URI: The part of a web request that identifies a resource, for example,
	//    /images/daily-ad.jpg.
	//
	//    * BODY: The part of a request that contains any additional data that you
	//    want to send to your web server as the HTTP request body, such as data
	//    from a form. The request body immediately follows the request headers.
	//    Note that only the first 8192 bytes of the request body are forwarded
	//    to AWS WAF for inspection. To allow or block requests based on the length
	//    of the body, you can create a size constraint set. For more information,
	//    see CreateSizeConstraintSet.
	//
	//    * SINGLE_QUERY_ARG: The parameter in the query string that you will inspect,
	//    such as UserName or SalesRegion. The maximum length for SINGLE_QUERY_ARG
	//    is 30 characters.
	//
	//    * ALL_QUERY_ARGS: Similar to SINGLE_QUERY_ARG, but rather than inspecting
	//    a single parameter, AWS WAF will inspect all parameters within the query
	//    for the value or regex pattern that you specify in TargetString.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"MatchFieldType"`
}

// String returns the string representation
func (s FieldToMatch) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s FieldToMatch) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *FieldToMatch) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FieldToMatch"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetData sets the Data field's value.
func (s *FieldToMatch) SetData(v string) *FieldToMatch {
	s.Data = &v
	return s
}

// SetType sets the Type field's value.
func (s *FieldToMatch) SetType(v string) *FieldToMatch {
	s.Type = &v
	return s
}

// The country from which web requests originate that you want AWS WAF to search
// for.
type GeoMatchConstraint struct {
	_ struct{} `type:"structure"`

	// The type of geographical area you want AWS WAF to search for. Currently Country
	// is the only valid value.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"GeoMatchConstraintType"`

	// The country that you want AWS WAF to search for.
	//
	// Value is a required field
	Value *string `type:"string" required:"true" enum:"GeoMatchConstraintValue"`
}

// String returns the string representation
func (s GeoMatchConstraint) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GeoMatchConstraint) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GeoMatchConstraint) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GeoMatchConstraint"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *GeoMatchConstraint) SetType(v string) *GeoMatchConstraint {
	s.Type = &v
	return s
}

// SetValue sets the Value field's value.
func (s *GeoMatchConstraint) SetValue(v string) *GeoMatchConstraint {
	s.Value = &v
	return s
}

// Contains one or more countries that AWS WAF will search for.
type GeoMatchSet struct {
	_ struct{} `type:"structure"`

	// An array of GeoMatchConstraint objects, which contain the country that you
	// want AWS WAF to search for.
	//
	// GeoMatchConstraints is a required field
	GeoMatchConstraints []*GeoMatchConstraint `type:"list" required:"true"`

	// The GeoMatchSetId for an GeoMatchSet. You use GeoMatchSetId to get information
	// about a GeoMatchSet (see GeoMatchSet), update a GeoMatchSet (see UpdateGeoMatchSet),
	// insert a GeoMatchSet into a Rule or delete one from a Rule (see UpdateRule),
	// and delete a GeoMatchSet from AWS WAF (see DeleteGeoMatchSet).
	//
	// GeoMatchSetId is returned by CreateGeoMatchSet and by ListGeoMatchSets.
	//
	// GeoMatchSetId is a required field
	GeoMatchSetId *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the GeoMatchSet. You can't change the name
	// of an GeoMatchSet after you create it.
	Name *string `min:"1" type:"string"`
}

// String returns the string representation
func (s GeoMatchSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GeoMatchSet) GoString() string {
	return s.String()
}

// SetGeoMatchConstraints sets the GeoMatchConstraints field's value.
func (s *GeoMatchSet) SetGeoMatchConstraints(v []*GeoMatchConstraint) *GeoMatchSet {
	s.GeoMatchConstraints = v
	return s
}

// SetGeoMatchSetId sets the GeoMatchSetId field's value.
func (s *GeoMatchSet) SetGeoMatchSetId(v string) *GeoMatchSet {
	s.GeoMatchSetId = &v
	return s
}

// SetName sets the Name field's value.
func (s *GeoMatchSet) SetName(v string) *GeoMatchSet {
	s.Name = &v
	return s
}

// Contains the identifier and the name of the GeoMatchSet.
type GeoMatchSetSummary struct {
	_ struct{} `type:"structure"`

	// The GeoMatchSetId for an GeoMatchSet. You can use GeoMatchSetId in a GetGeoMatchSet
	// request to get detailed information about an GeoMatchSet.
	//
	// GeoMatchSetId is a required field
	GeoMatchSetId *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the GeoMatchSet. You can't change the name
	// of an GeoMatchSet after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GeoMatchSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GeoMatchSetSummary) GoString() string {
	return s.String()
}

// SetGeoMatchSetId sets the GeoMatchSetId field's value.
func (s *GeoMatchSetSummary) SetGeoMatchSetId(v string) *GeoMatchSetSummary {
	s.GeoMatchSetId = &v
	return s
}

// SetName sets the Name field's value.
func (s *GeoMatchSetSummary) SetName(v string) *GeoMatchSetSummary {
	s.Name = &v
	return s
}

// Specifies the type of update to perform to an GeoMatchSet with UpdateGeoMatchSet.
type GeoMatchSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specifies whether to insert or delete a country with UpdateGeoMatchSet.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// The country from which web requests originate that you want AWS WAF to search
	// for.
	//
	// GeoMatchConstraint is a required field
	GeoMatchConstraint *GeoMatchConstraint `type:"structure" required:"true"`
}

// String returns the string representation
func (s GeoMatchSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GeoMatchSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GeoMatchSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GeoMatchSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.GeoMatchConstraint == nil {
		invalidParams.Add(request.NewErrParamRequired("GeoMatchConstraint"))
	}
	if s.GeoMatchConstraint != nil {
		if err := s.GeoMatchConstraint.Validate(); err != nil {
			invalidParams.AddNested("GeoMatchConstraint", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *GeoMatchSetUpdate) SetAction(v string) *GeoMatchSetUpdate {
	s.Action = &v
	return s
}

// SetGeoMatchConstraint sets the GeoMatchConstraint field's value.
func (s *GeoMatchSetUpdate) SetGeoMatchConstraint(v *GeoMatchConstraint) *GeoMatchSetUpdate {
	s.GeoMatchConstraint = v
	return s
}

type GetByteMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The ByteMatchSetId of the ByteMatchSet that you want to get. ByteMatchSetId
	// is returned by CreateByteMatchSet and by ListByteMatchSets.
	//
	// ByteMatchSetId is a required field
	ByteMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetByteMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetByteMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetByteMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetByteMatchSetInput"}
	if s.ByteMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("ByteMatchSetId"))
	}
	if s.ByteMatchSetId != nil && len(*s.ByteMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ByteMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetByteMatchSetId sets the ByteMatchSetId field's value.
func (s *GetByteMatchSetInput) SetByteMatchSetId(v string) *GetByteMatchSetInput {
	s.ByteMatchSetId = &v
	return s
}

type GetByteMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the ByteMatchSet that you specified in the GetByteMatchSet
	// request. For more information, see the following topics:
	//
	//    * ByteMatchSet: Contains ByteMatchSetId, ByteMatchTuples, and Name
	//
	//    * ByteMatchTuples: Contains an array of ByteMatchTuple objects. Each ByteMatchTuple
	//    object contains FieldToMatch, PositionalConstraint, TargetString, and
	//    TextTransformation
	//
	//    * FieldToMatch: Contains Data and Type
	ByteMatchSet *ByteMatchSet `type:"structure"`
}

// String returns the string representation
func (s GetByteMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetByteMatchSetOutput) GoString() string {
	return s.String()
}

// SetByteMatchSet sets the ByteMatchSet field's value.
func (s *GetByteMatchSetOutput) SetByteMatchSet(v *ByteMatchSet) *GetByteMatchSetOutput {
	s.ByteMatchSet = v
	return s
}

type GetChangeTokenInput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s GetChangeTokenInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetChangeTokenInput) GoString() string {
	return s.String()
}

type GetChangeTokenOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used in the request. Use this value in a GetChangeTokenStatus
	// request to get the current status of the request.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s GetChangeTokenOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetChangeTokenOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *GetChangeTokenOutput) SetChangeToken(v string) *GetChangeTokenOutput {
	s.ChangeToken = &v
	return s
}

type GetChangeTokenStatusInput struct {
	_ struct{} `type:"structure"`

	// The change token for which you want to get the status. This change token
	// was previously returned in the GetChangeToken response.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetChangeTokenStatusInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetChangeTokenStatusInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetChangeTokenStatusInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetChangeTokenStatusInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *GetChangeTokenStatusInput) SetChangeToken(v string) *GetChangeTokenStatusInput {
	s.ChangeToken = &v
	return s
}

type GetChangeTokenStatusOutput struct {
	_ struct{} `type:"structure"`

	// The status of the change token.
	ChangeTokenStatus *string `type:"string" enum:"ChangeTokenStatus"`
}

// String returns the string representation
func (s GetChangeTokenStatusOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetChangeTokenStatusOutput) GoString() string {
	return s.String()
}

// SetChangeTokenStatus sets the ChangeTokenStatus field's value.
func (s *GetChangeTokenStatusOutput) SetChangeTokenStatus(v string) *GetChangeTokenStatusOutput {
	s.ChangeTokenStatus = &v
	return s
}

type GetGeoMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The GeoMatchSetId of the GeoMatchSet that you want to get. GeoMatchSetId
	// is returned by CreateGeoMatchSet and by ListGeoMatchSets.
	//
	// GeoMatchSetId is a required field
	GeoMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetGeoMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetGeoMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetGeoMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetGeoMatchSetInput"}
	if s.GeoMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("GeoMatchSetId"))
	}
	if s.GeoMatchSetId != nil && len(*s.GeoMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GeoMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetGeoMatchSetId sets the GeoMatchSetId field's value.
func (s *GetGeoMatchSetInput) SetGeoMatchSetId(v string) *GetGeoMatchSetInput {
	s.GeoMatchSetId = &v
	return s
}

type GetGeoMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the GeoMatchSet that you specified in the GetGeoMatchSet
	// request. This includes the Type, which for a GeoMatchContraint is always
	// Country, as well as the Value, which is the identifier for a specific country.
	GeoMatchSet *GeoMatchSet `type:"structure"`
}

// String returns the string representation
func (s GetGeoMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetGeoMatchSetOutput) GoString() string {
	return s.String()
}

// SetGeoMatchSet sets the GeoMatchSet field's value.
func (s *GetGeoMatchSetOutput) SetGeoMatchSet(v *GeoMatchSet) *GetGeoMatchSetOutput {
	s.GeoMatchSet = v
	return s
}

type GetIPSetInput struct {
	_ struct{} `type:"structure"`

	// The IPSetId of the IPSet that you want to get. IPSetId is returned by CreateIPSet
	// and by ListIPSets.
	//
	// IPSetId is a required field
	IPSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetIPSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetIPSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetIPSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetIPSetInput"}
	if s.IPSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("IPSetId"))
	}
	if s.IPSetId != nil && len(*s.IPSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IPSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIPSetId sets the IPSetId field's value.
func (s *GetIPSetInput) SetIPSetId(v string) *GetIPSetInput {
	s.IPSetId = &v
	return s
}

type GetIPSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the IPSet that you specified in the GetIPSet request. For
	// more information, see the following topics:
	//
	//    * IPSet: Contains IPSetDescriptors, IPSetId, and Name
	//
	//    * IPSetDescriptors: Contains an array of IPSetDescriptor objects. Each
	//    IPSetDescriptor object contains Type and Value
	IPSet *IPSet `type:"structure"`
}

// String returns the string representation
func (s GetIPSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetIPSetOutput) GoString() string {
	return s.String()
}

// SetIPSet sets the IPSet field's value.
func (s *GetIPSetOutput) SetIPSet(v *IPSet) *GetIPSetOutput {
	s.IPSet = v
	return s
}

type GetLoggingConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the web ACL for which you want to get the
	// LoggingConfiguration.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetLoggingConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetLoggingConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetLoggingConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetLoggingConfigurationInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *GetLoggingConfigurationInput) SetResourceArn(v string) *GetLoggingConfigurationInput {
	s.ResourceArn = &v
	return s
}

type GetLoggingConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// The LoggingConfiguration for the specified web ACL.
	LoggingConfiguration *LoggingConfiguration `type:"structure"`
}

// String returns the string representation
func (s GetLoggingConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetLoggingConfigurationOutput) GoString() string {
	return s.String()
}

// SetLoggingConfiguration sets the LoggingConfiguration field's value.
func (s *GetLoggingConfigurationOutput) SetLoggingConfiguration(v *LoggingConfiguration) *GetLoggingConfigurationOutput {
	s.LoggingConfiguration = v
	return s
}

type GetPermissionPolicyInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the RuleGroup for which you want to get
	// the policy.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetPermissionPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetPermissionPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetPermissionPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetPermissionPolicyInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *GetPermissionPolicyInput) SetResourceArn(v string) *GetPermissionPolicyInput {
	s.ResourceArn = &v
	return s
}

type GetPermissionPolicyOutput struct {
	_ struct{} `type:"structure"`

	// The IAM policy attached to the specified RuleGroup.
	Policy *string `min:"1" type:"string"`
}

// String returns the string representation
func (s GetPermissionPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetPermissionPolicyOutput) GoString() string {
	return s.String()
}

// SetPolicy sets the Policy field's value.
func (s *GetPermissionPolicyOutput) SetPolicy(v string) *GetPermissionPolicyOutput {
	s.Policy = &v
	return s
}

type GetRateBasedRuleInput struct {
	_ struct{} `type:"structure"`

	// The RuleId of the RateBasedRule that you want to get. RuleId is returned
	// by CreateRateBasedRule and by ListRateBasedRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetRateBasedRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRateBasedRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRateBasedRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRateBasedRuleInput"}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleId sets the RuleId field's value.
func (s *GetRateBasedRuleInput) SetRuleId(v string) *GetRateBasedRuleInput {
	s.RuleId = &v
	return s
}

type GetRateBasedRuleManagedKeysInput struct {
	_ struct{} `type:"structure"`

	// A null value and not currently used. Do not include this in your request.
	NextMarker *string `min:"1" type:"string"`

	// The RuleId of the RateBasedRule for which you want to get a list of ManagedKeys.
	// RuleId is returned by CreateRateBasedRule and by ListRateBasedRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetRateBasedRuleManagedKeysInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRateBasedRuleManagedKeysInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRateBasedRuleManagedKeysInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRateBasedRuleManagedKeysInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetNextMarker sets the NextMarker field's value.
func (s *GetRateBasedRuleManagedKeysInput) SetNextMarker(v string) *GetRateBasedRuleManagedKeysInput {
	s.NextMarker = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *GetRateBasedRuleManagedKeysInput) SetRuleId(v string) *GetRateBasedRuleManagedKeysInput {
	s.RuleId = &v
	return s
}

type GetRateBasedRuleManagedKeysOutput struct {
	_ struct{} `type:"structure"`

	// An array of IP addresses that currently are blocked by the specified RateBasedRule.
	ManagedKeys []*string `type:"list"`

	// A null value and not currently used.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s GetRateBasedRuleManagedKeysOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRateBasedRuleManagedKeysOutput) GoString() string {
	return s.String()
}

// SetManagedKeys sets the ManagedKeys field's value.
func (s *GetRateBasedRuleManagedKeysOutput) SetManagedKeys(v []*string) *GetRateBasedRuleManagedKeysOutput {
	s.ManagedKeys = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *GetRateBasedRuleManagedKeysOutput) SetNextMarker(v string) *GetRateBasedRuleManagedKeysOutput {
	s.NextMarker = &v
	return s
}

type GetRateBasedRuleOutput struct {
	_ struct{} `type:"structure"`

	// Information about the RateBasedRule that you specified in the GetRateBasedRule
	// request.
	Rule *RateBasedRule `type:"structure"`
}

// String returns the string representation
func (s GetRateBasedRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRateBasedRuleOutput) GoString() string {
	return s.String()
}

// SetRule sets the Rule field's value.
func (s *GetRateBasedRuleOutput) SetRule(v *RateBasedRule) *GetRateBasedRuleOutput {
	s.Rule = v
	return s
}

type GetRegexMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The RegexMatchSetId of the RegexMatchSet that you want to get. RegexMatchSetId
	// is returned by CreateRegexMatchSet and by ListRegexMatchSets.
	//
	// RegexMatchSetId is a required field
	RegexMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetRegexMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRegexMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRegexMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRegexMatchSetInput"}
	if s.RegexMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexMatchSetId"))
	}
	if s.RegexMatchSetId != nil && len(*s.RegexMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRegexMatchSetId sets the RegexMatchSetId field's value.
func (s *GetRegexMatchSetInput) SetRegexMatchSetId(v string) *GetRegexMatchSetInput {
	s.RegexMatchSetId = &v
	return s
}

type GetRegexMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the RegexMatchSet that you specified in the GetRegexMatchSet
	// request. For more information, see RegexMatchTuple.
	RegexMatchSet *RegexMatchSet `type:"structure"`
}

// String returns the string representation
func (s GetRegexMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRegexMatchSetOutput) GoString() string {
	return s.String()
}

// SetRegexMatchSet sets the RegexMatchSet field's value.
func (s *GetRegexMatchSetOutput) SetRegexMatchSet(v *RegexMatchSet) *GetRegexMatchSetOutput {
	s.RegexMatchSet = v
	return s
}

type GetRegexPatternSetInput struct {
	_ struct{} `type:"structure"`

	// The RegexPatternSetId of the RegexPatternSet that you want to get. RegexPatternSetId
	// is returned by CreateRegexPatternSet and by ListRegexPatternSets.
	//
	// RegexPatternSetId is a required field
	RegexPatternSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetRegexPatternSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRegexPatternSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRegexPatternSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRegexPatternSetInput"}
	if s.RegexPatternSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexPatternSetId"))
	}
	if s.RegexPatternSetId != nil && len(*s.RegexPatternSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexPatternSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRegexPatternSetId sets the RegexPatternSetId field's value.
func (s *GetRegexPatternSetInput) SetRegexPatternSetId(v string) *GetRegexPatternSetInput {
	s.RegexPatternSetId = &v
	return s
}

type GetRegexPatternSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the RegexPatternSet that you specified in the GetRegexPatternSet
	// request, including the identifier of the pattern set and the regular expression
	// patterns you want AWS WAF to search for.
	RegexPatternSet *RegexPatternSet `type:"structure"`
}

// String returns the string representation
func (s GetRegexPatternSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRegexPatternSetOutput) GoString() string {
	return s.String()
}

// SetRegexPatternSet sets the RegexPatternSet field's value.
func (s *GetRegexPatternSetOutput) SetRegexPatternSet(v *RegexPatternSet) *GetRegexPatternSetOutput {
	s.RegexPatternSet = v
	return s
}

type GetRuleGroupInput struct {
	_ struct{} `type:"structure"`

	// The RuleGroupId of the RuleGroup that you want to get. RuleGroupId is returned
	// by CreateRuleGroup and by ListRuleGroups.
	//
	// RuleGroupId is a required field
	RuleGroupId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetRuleGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRuleGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRuleGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRuleGroupInput"}
	if s.RuleGroupId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleGroupId"))
	}
	if s.RuleGroupId != nil && len(*s.RuleGroupId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleGroupId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *GetRuleGroupInput) SetRuleGroupId(v string) *GetRuleGroupInput {
	s.RuleGroupId = &v
	return s
}

type GetRuleGroupOutput struct {
	_ struct{} `type:"structure"`

	// Information about the RuleGroup that you specified in the GetRuleGroup request.
	RuleGroup *RuleGroup `type:"structure"`
}

// String returns the string representation
func (s GetRuleGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRuleGroupOutput) GoString() string {
	return s.String()
}

// SetRuleGroup sets the RuleGroup field's value.
func (s *GetRuleGroupOutput) SetRuleGroup(v *RuleGroup) *GetRuleGroupOutput {
	s.RuleGroup = v
	return s
}

type GetRuleInput struct {
	_ struct{} `type:"structure"`

	// The RuleId of the Rule that you want to get. RuleId is returned by CreateRule
	// and by ListRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRuleInput"}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleId sets the RuleId field's value.
func (s *GetRuleInput) SetRuleId(v string) *GetRuleInput {
	s.RuleId = &v
	return s
}

type GetRuleOutput struct {
	_ struct{} `type:"structure"`

	// Information about the Rule that you specified in the GetRule request. For
	// more information, see the following topics:
	//
	//    * Rule: Contains MetricName, Name, an array of Predicate objects, and
	//    RuleId
	//
	//    * Predicate: Each Predicate object contains DataId, Negated, and Type
	Rule *Rule `type:"structure"`
}

// String returns the string representation
func (s GetRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetRuleOutput) GoString() string {
	return s.String()
}

// SetRule sets the Rule field's value.
func (s *GetRuleOutput) SetRule(v *Rule) *GetRuleOutput {
	s.Rule = v
	return s
}

type GetSampledRequestsInput struct {
	_ struct{} `type:"structure"`

	// The number of requests that you want AWS WAF to return from among the first
	// 5,000 requests that your AWS resource received during the time range. If
	// your resource received fewer requests than the value of MaxItems, GetSampledRequests
	// returns information about all of them.
	//
	// MaxItems is a required field
	MaxItems *int64 `min:"1" type:"long" required:"true"`

	// RuleId is one of three values:
	//
	//    * The RuleId of the Rule or the RuleGroupId of the RuleGroup for which
	//    you want GetSampledRequests to return a sample of requests.
	//
	//    * Default_Action, which causes GetSampledRequests to return a sample of
	//    the requests that didn't match any of the rules in the specified WebACL.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`

	// The start date and time and the end date and time of the range for which
	// you want GetSampledRequests to return a sample of requests. Specify the date
	// and time in the following format: "2016-09-27T14:50Z". You can specify any
	// time range in the previous three hours.
	//
	// TimeWindow is a required field
	TimeWindow *TimeWindow `type:"structure" required:"true"`

	// The WebACLId of the WebACL for which you want GetSampledRequests to return
	// a sample of requests.
	//
	// WebAclId is a required field
	WebAclId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetSampledRequestsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetSampledRequestsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSampledRequestsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSampledRequestsInput"}
	if s.MaxItems == nil {
		invalidParams.Add(request.NewErrParamRequired("MaxItems"))
	}
	if s.MaxItems != nil && *s.MaxItems < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxItems", 1))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}
	if s.TimeWindow == nil {
		invalidParams.Add(request.NewErrParamRequired("TimeWindow"))
	}
	if s.WebAclId == nil {
		invalidParams.Add(request.NewErrParamRequired("WebAclId"))
	}
	if s.WebAclId != nil && len(*s.WebAclId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("WebAclId", 1))
	}
	if s.TimeWindow != nil {
		if err := s.TimeWindow.Validate(); err != nil {
			invalidParams.AddNested("TimeWindow", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxItems sets the MaxItems field's value.
func (s *GetSampledRequestsInput) SetMaxItems(v int64) *GetSampledRequestsInput {
	s.MaxItems = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *GetSampledRequestsInput) SetRuleId(v string) *GetSampledRequestsInput {
	s.RuleId = &v
	return s
}

// SetTimeWindow sets the TimeWindow field's value.
func (s *GetSampledRequestsInput) SetTimeWindow(v *TimeWindow) *GetSampledRequestsInput {
	s.TimeWindow = v
	return s
}

// SetWebAclId sets the WebAclId field's value.
func (s *GetSampledRequestsInput) SetWebAclId(v string) *GetSampledRequestsInput {
	s.WebAclId = &v
	return s
}

type GetSampledRequestsOutput struct {
	_ struct{} `type:"structure"`

	// The total number of requests from which GetSampledRequests got a sample of
	// MaxItems requests. If PopulationSize is less than MaxItems, the sample includes
	// every request that your AWS resource received during the specified time range.
	PopulationSize *int64 `type:"long"`

	// A complex type that contains detailed information about each of the requests
	// in the sample.
	SampledRequests []*SampledHTTPRequest `type:"list"`

	// Usually, TimeWindow is the time range that you specified in the GetSampledRequests
	// request. However, if your AWS resource received more than 5,000 requests
	// during the time range that you specified in the request, GetSampledRequests
	// returns the time range for the first 5,000 requests.
	TimeWindow *TimeWindow `type:"structure"`
}

// String returns the string representation
func (s GetSampledRequestsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetSampledRequestsOutput) GoString() string {
	return s.String()
}

// SetPopulationSize sets the PopulationSize field's value.
func (s *GetSampledRequestsOutput) SetPopulationSize(v int64) *GetSampledRequestsOutput {
	s.PopulationSize = &v
	return s
}

// SetSampledRequests sets the SampledRequests field's value.
func (s *GetSampledRequestsOutput) SetSampledRequests(v []*SampledHTTPRequest) *GetSampledRequestsOutput {
	s.SampledRequests = v
	return s
}

// SetTimeWindow sets the TimeWindow field's value.
func (s *GetSampledRequestsOutput) SetTimeWindow(v *TimeWindow) *GetSampledRequestsOutput {
	s.TimeWindow = v
	return s
}

type GetSizeConstraintSetInput struct {
	_ struct{} `type:"structure"`

	// The SizeConstraintSetId of the SizeConstraintSet that you want to get. SizeConstraintSetId
	// is returned by CreateSizeConstraintSet and by ListSizeConstraintSets.
	//
	// SizeConstraintSetId is a required field
	SizeConstraintSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetSizeConstraintSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetSizeConstraintSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSizeConstraintSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSizeConstraintSetInput"}
	if s.SizeConstraintSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("SizeConstraintSetId"))
	}
	if s.SizeConstraintSetId != nil && len(*s.SizeConstraintSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SizeConstraintSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetSizeConstraintSetId sets the SizeConstraintSetId field's value.
func (s *GetSizeConstraintSetInput) SetSizeConstraintSetId(v string) *GetSizeConstraintSetInput {
	s.SizeConstraintSetId = &v
	return s
}

type GetSizeConstraintSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the SizeConstraintSet that you specified in the GetSizeConstraintSet
	// request. For more information, see the following topics:
	//
	//    * SizeConstraintSet: Contains SizeConstraintSetId, SizeConstraints, and
	//    Name
	//
	//    * SizeConstraints: Contains an array of SizeConstraint objects. Each SizeConstraint
	//    object contains FieldToMatch, TextTransformation, ComparisonOperator,
	//    and Size
	//
	//    * FieldToMatch: Contains Data and Type
	SizeConstraintSet *SizeConstraintSet `type:"structure"`
}

// String returns the string representation
func (s GetSizeConstraintSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetSizeConstraintSetOutput) GoString() string {
	return s.String()
}

// SetSizeConstraintSet sets the SizeConstraintSet field's value.
func (s *GetSizeConstraintSetOutput) SetSizeConstraintSet(v *SizeConstraintSet) *GetSizeConstraintSetOutput {
	s.SizeConstraintSet = v
	return s
}

// A request to get a SqlInjectionMatchSet.
type GetSqlInjectionMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The SqlInjectionMatchSetId of the SqlInjectionMatchSet that you want to get.
	// SqlInjectionMatchSetId is returned by CreateSqlInjectionMatchSet and by ListSqlInjectionMatchSets.
	//
	// SqlInjectionMatchSetId is a required field
	SqlInjectionMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetSqlInjectionMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetSqlInjectionMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSqlInjectionMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSqlInjectionMatchSetInput"}
	if s.SqlInjectionMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("SqlInjectionMatchSetId"))
	}
	if s.SqlInjectionMatchSetId != nil && len(*s.SqlInjectionMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SqlInjectionMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetSqlInjectionMatchSetId sets the SqlInjectionMatchSetId field's value.
func (s *GetSqlInjectionMatchSetInput) SetSqlInjectionMatchSetId(v string) *GetSqlInjectionMatchSetInput {
	s.SqlInjectionMatchSetId = &v
	return s
}

// The response to a GetSqlInjectionMatchSet request.
type GetSqlInjectionMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the SqlInjectionMatchSet that you specified in the GetSqlInjectionMatchSet
	// request. For more information, see the following topics:
	//
	//    * SqlInjectionMatchSet: Contains Name, SqlInjectionMatchSetId, and an
	//    array of SqlInjectionMatchTuple objects
	//
	//    * SqlInjectionMatchTuple: Each SqlInjectionMatchTuple object contains
	//    FieldToMatch and TextTransformation
	//
	//    * FieldToMatch: Contains Data and Type
	SqlInjectionMatchSet *SqlInjectionMatchSet `type:"structure"`
}

// String returns the string representation
func (s GetSqlInjectionMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetSqlInjectionMatchSetOutput) GoString() string {
	return s.String()
}

// SetSqlInjectionMatchSet sets the SqlInjectionMatchSet field's value.
func (s *GetSqlInjectionMatchSetOutput) SetSqlInjectionMatchSet(v *SqlInjectionMatchSet) *GetSqlInjectionMatchSetOutput {
	s.SqlInjectionMatchSet = v
	return s
}

type GetWebACLInput struct {
	_ struct{} `type:"structure"`

	// The WebACLId of the WebACL that you want to get. WebACLId is returned by
	// CreateWebACL and by ListWebACLs.
	//
	// WebACLId is a required field
	WebACLId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetWebACLInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetWebACLInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetWebACLInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetWebACLInput"}
	if s.WebACLId == nil {
		invalidParams.Add(request.NewErrParamRequired("WebACLId"))
	}
	if s.WebACLId != nil && len(*s.WebACLId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("WebACLId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetWebACLId sets the WebACLId field's value.
func (s *GetWebACLInput) SetWebACLId(v string) *GetWebACLInput {
	s.WebACLId = &v
	return s
}

type GetWebACLOutput struct {
	_ struct{} `type:"structure"`

	// Information about the WebACL that you specified in the GetWebACL request.
	// For more information, see the following topics:
	//
	//    * WebACL: Contains DefaultAction, MetricName, Name, an array of Rule objects,
	//    and WebACLId
	//
	//    * DefaultAction (Data type is WafAction): Contains Type
	//
	//    * Rules: Contains an array of ActivatedRule objects, which contain Action,
	//    Priority, and RuleId
	//
	//    * Action: Contains Type
	WebACL *WebACL `type:"structure"`
}

// String returns the string representation
func (s GetWebACLOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetWebACLOutput) GoString() string {
	return s.String()
}

// SetWebACL sets the WebACL field's value.
func (s *GetWebACLOutput) SetWebACL(v *WebACL) *GetWebACLOutput {
	s.WebACL = v
	return s
}

// A request to get an XssMatchSet.
type GetXssMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The XssMatchSetId of the XssMatchSet that you want to get. XssMatchSetId
	// is returned by CreateXssMatchSet and by ListXssMatchSets.
	//
	// XssMatchSetId is a required field
	XssMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s GetXssMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetXssMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetXssMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetXssMatchSetInput"}
	if s.XssMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("XssMatchSetId"))
	}
	if s.XssMatchSetId != nil && len(*s.XssMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("XssMatchSetId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetXssMatchSetId sets the XssMatchSetId field's value.
func (s *GetXssMatchSetInput) SetXssMatchSetId(v string) *GetXssMatchSetInput {
	s.XssMatchSetId = &v
	return s
}

// The response to a GetXssMatchSet request.
type GetXssMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about the XssMatchSet that you specified in the GetXssMatchSet
	// request. For more information, see the following topics:
	//
	//    * XssMatchSet: Contains Name, XssMatchSetId, and an array of XssMatchTuple
	//    objects
	//
	//    * XssMatchTuple: Each XssMatchTuple object contains FieldToMatch and TextTransformation
	//
	//    * FieldToMatch: Contains Data and Type
	XssMatchSet *XssMatchSet `type:"structure"`
}

// String returns the string representation
func (s GetXssMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetXssMatchSetOutput) GoString() string {
	return s.String()
}

// SetXssMatchSet sets the XssMatchSet field's value.
func (s *GetXssMatchSetOutput) SetXssMatchSet(v *XssMatchSet) *GetXssMatchSetOutput {
	s.XssMatchSet = v
	return s
}

// The response from a GetSampledRequests request includes an HTTPHeader complex
// type that appears as Headers in the response syntax. HTTPHeader contains
// the names and values of all of the headers that appear in one of the web
// requests that were returned by GetSampledRequests.
type HTTPHeader struct {
	_ struct{} `type:"structure"`

	// The name of one of the headers in the sampled web request.
	Name *string `type:"string"`

	// The value of one of the headers in the sampled web request.
	Value *string `type:"string"`
}

// String returns the string representation
func (s HTTPHeader) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s HTTPHeader) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *HTTPHeader) SetName(v string) *HTTPHeader {
	s.Name = &v
	return s
}

// SetValue sets the Value field's value.
func (s *HTTPHeader) SetValue(v string) *HTTPHeader {
	s.Value = &v
	return s
}

// The response from a GetSampledRequests request includes an HTTPRequest complex
// type that appears as Request in the response syntax. HTTPRequest contains
// information about one of the web requests that were returned by GetSampledRequests.
type HTTPRequest struct {
	_ struct{} `type:"structure"`

	// The IP address that the request originated from. If the WebACL is associated
	// with a CloudFront distribution, this is the value of one of the following
	// fields in CloudFront access logs:
	//
	//    * c-ip, if the viewer did not use an HTTP proxy or a load balancer to
	//    send the request
	//
	//    * x-forwarded-for, if the viewer did use an HTTP proxy or a load balancer
	//    to send the request
	ClientIP *string `type:"string"`

	// The two-letter country code for the country that the request originated from.
	// For a current list of country codes, see the Wikipedia entry ISO 3166-1 alpha-2
	// (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
	Country *string `type:"string"`

	// The HTTP version specified in the sampled web request, for example, HTTP/1.1.
	HTTPVersion *string `type:"string"`

	// A complex type that contains two values for each header in the sampled web
	// request: the name of the header and the value of the header.
	Headers []*HTTPHeader `type:"list"`

	// The HTTP method specified in the sampled web request. CloudFront supports
	// the following methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, and PUT.
	Method *string `type:"string"`

	// The part of a web request that identifies the resource, for example, /images/daily-ad.jpg.
	URI *string `type:"string"`
}

// String returns the string representation
func (s HTTPRequest) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s HTTPRequest) GoString() string {
	return s.String()
}

// SetClientIP sets the ClientIP field's value.
func (s *HTTPRequest) SetClientIP(v string) *HTTPRequest {
	s.ClientIP = &v
	return s
}

// SetCountry sets the Country field's value.
func (s *HTTPRequest) SetCountry(v string) *HTTPRequest {
	s.Country = &v
	return s
}

// SetHTTPVersion sets the HTTPVersion field's value.
func (s *HTTPRequest) SetHTTPVersion(v string) *HTTPRequest {
	s.HTTPVersion = &v
	return s
}

// SetHeaders sets the Headers field's value.
func (s *HTTPRequest) SetHeaders(v []*HTTPHeader) *HTTPRequest {
	s.Headers = v
	return s
}

// SetMethod sets the Method field's value.
func (s *HTTPRequest) SetMethod(v string) *HTTPRequest {
	s.Method = &v
	return s
}

// SetURI sets the URI field's value.
func (s *HTTPRequest) SetURI(v string) *HTTPRequest {
	s.URI = &v
	return s
}

// Contains one or more IP addresses or blocks of IP addresses specified in
// Classless Inter-Domain Routing (CIDR) notation. AWS WAF supports IPv4 address
// ranges: /8 and any range between /16 through /32. AWS WAF supports IPv6 address
// ranges: /24, /32, /48, /56, /64, and /128.
//
// To specify an individual IP address, you specify the four-part IP address
// followed by a /32, for example, 192.0.2.0/31. To block a range of IP addresses,
// you can specify /8 or any range between /16 through /32 (for IPv4) or /24,
// /32, /48, /56, /64, or /128 (for IPv6). For more information about CIDR notation,
// see the Wikipedia entry Classless Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing).
type IPSet struct {
	_ struct{} `type:"structure"`

	// The IP address type (IPV4 or IPV6) and the IP address range (in CIDR notation)
	// that web requests originate from. If the WebACL is associated with a CloudFront
	// distribution and the viewer did not use an HTTP proxy or a load balancer
	// to send the request, this is the value of the c-ip field in the CloudFront
	// access logs.
	//
	// IPSetDescriptors is a required field
	IPSetDescriptors []*IPSetDescriptor `type:"list" required:"true"`

	// The IPSetId for an IPSet. You use IPSetId to get information about an IPSet
	// (see GetIPSet), update an IPSet (see UpdateIPSet), insert an IPSet into a
	// Rule or delete one from a Rule (see UpdateRule), and delete an IPSet from
	// AWS WAF (see DeleteIPSet).
	//
	// IPSetId is returned by CreateIPSet and by ListIPSets.
	//
	// IPSetId is a required field
	IPSetId *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the IPSet. You can't change the name of
	// an IPSet after you create it.
	Name *string `min:"1" type:"string"`
}

// String returns the string representation
func (s IPSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s IPSet) GoString() string {
	return s.String()
}

// SetIPSetDescriptors sets the IPSetDescriptors field's value.
func (s *IPSet) SetIPSetDescriptors(v []*IPSetDescriptor) *IPSet {
	s.IPSetDescriptors = v
	return s
}

// SetIPSetId sets the IPSetId field's value.
func (s *IPSet) SetIPSetId(v string) *IPSet {
	s.IPSetId = &v
	return s
}

// SetName sets the Name field's value.
func (s *IPSet) SetName(v string) *IPSet {
	s.Name = &v
	return s
}

// Specifies the IP address type (IPV4 or IPV6) and the IP address range (in
// CIDR format) that web requests originate from.
type IPSetDescriptor struct {
	_ struct{} `type:"structure"`

	// Specify IPV4 or IPV6.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"IPSetDescriptorType"`

	// Specify an IPv4 address by using CIDR notation. For example:
	//
	//    * To configure AWS WAF to allow, block, or count requests that originated
	//    from the IP address 192.0.2.44, specify 192.0.2.44/32.
	//
	//    * To configure AWS WAF to allow, block, or count requests that originated
	//    from IP addresses from 192.0.2.0 to 192.0.2.255, specify 192.0.2.0/24.
	//
	// For more information about CIDR notation, see the Wikipedia entry Classless
	// Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing).
	//
	// Specify an IPv6 address by using CIDR notation. For example:
	//
	//    * To configure AWS WAF to allow, block, or count requests that originated
	//    from the IP address 1111:0000:0000:0000:0000:0000:0000:0111, specify 1111:0000:0000:0000:0000:0000:0000:0111/128.
	//
	//    * To configure AWS WAF to allow, block, or count requests that originated
	//    from IP addresses 1111:0000:0000:0000:0000:0000:0000:0000 to 1111:0000:0000:0000:ffff:ffff:ffff:ffff,
	//    specify 1111:0000:0000:0000:0000:0000:0000:0000/64.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

// String returns the string representation
func (s IPSetDescriptor) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s IPSetDescriptor) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *IPSetDescriptor) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "IPSetDescriptor"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *IPSetDescriptor) SetType(v string) *IPSetDescriptor {
	s.Type = &v
	return s
}

// SetValue sets the Value field's value.
func (s *IPSetDescriptor) SetValue(v string) *IPSetDescriptor {
	s.Value = &v
	return s
}

// Contains the identifier and the name of the IPSet.
type IPSetSummary struct {
	_ struct{} `type:"structure"`

	// The IPSetId for an IPSet. You can use IPSetId in a GetIPSet request to get
	// detailed information about an IPSet.
	//
	// IPSetId is a required field
	IPSetId *string `min:"1" type:"string" required:"true"`

	// A friendly name or description of the IPSet. You can't change the name of
	// an IPSet after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s IPSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s IPSetSummary) GoString() string {
	return s.String()
}

// SetIPSetId sets the IPSetId field's value.
func (s *IPSetSummary) SetIPSetId(v string) *IPSetSummary {
	s.IPSetId = &v
	return s
}

// SetName sets the Name field's value.
func (s *IPSetSummary) SetName(v string) *IPSetSummary {
	s.Name = &v
	return s
}

// Specifies the type of update to perform to an IPSet with UpdateIPSet.
type IPSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specifies whether to insert or delete an IP address with UpdateIPSet.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// The IP address type (IPV4 or IPV6) and the IP address range (in CIDR notation)
	// that web requests originate from.
	//
	// IPSetDescriptor is a required field
	IPSetDescriptor *IPSetDescriptor `type:"structure" required:"true"`
}

// String returns the string representation
func (s IPSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s IPSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *IPSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "IPSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.IPSetDescriptor == nil {
		invalidParams.Add(request.NewErrParamRequired("IPSetDescriptor"))
	}
	if s.IPSetDescriptor != nil {
		if err := s.IPSetDescriptor.Validate(); err != nil {
			invalidParams.AddNested("IPSetDescriptor", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *IPSetUpdate) SetAction(v string) *IPSetUpdate {
	s.Action = &v
	return s
}

// SetIPSetDescriptor sets the IPSetDescriptor field's value.
func (s *IPSetUpdate) SetIPSetDescriptor(v *IPSetDescriptor) *IPSetUpdate {
	s.IPSetDescriptor = v
	return s
}

type ListActivatedRulesInRuleGroupInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of ActivatedRules that you want AWS WAF to return for
	// this request. If you have more ActivatedRules than the number that you specify
	// for Limit, the response includes a NextMarker value that you can use to get
	// another batch of ActivatedRules.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more ActivatedRules than the
	// value of Limit, AWS WAF returns a NextMarker value in the response that allows
	// you to list another group of ActivatedRules. For the second and subsequent
	// ListActivatedRulesInRuleGroup requests, specify the value of NextMarker from
	// the previous response to get information about another batch of ActivatedRules.
	NextMarker *string `min:"1" type:"string"`

	// The RuleGroupId of the RuleGroup for which you want to get a list of ActivatedRule
	// objects.
	RuleGroupId *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListActivatedRulesInRuleGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListActivatedRulesInRuleGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListActivatedRulesInRuleGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListActivatedRulesInRuleGroupInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}
	if s.RuleGroupId != nil && len(*s.RuleGroupId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleGroupId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListActivatedRulesInRuleGroupInput) SetLimit(v int64) *ListActivatedRulesInRuleGroupInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListActivatedRulesInRuleGroupInput) SetNextMarker(v string) *ListActivatedRulesInRuleGroupInput {
	s.NextMarker = &v
	return s
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *ListActivatedRulesInRuleGroupInput) SetRuleGroupId(v string) *ListActivatedRulesInRuleGroupInput {
	s.RuleGroupId = &v
	return s
}

type ListActivatedRulesInRuleGroupOutput struct {
	_ struct{} `type:"structure"`

	// An array of ActivatedRules objects.
	ActivatedRules []*ActivatedRule `type:"list"`

	// If you have more ActivatedRules than the number that you specified for Limit
	// in the request, the response includes a NextMarker value. To list more ActivatedRules,
	// submit another ListActivatedRulesInRuleGroup request, and specify the NextMarker
	// value from the response in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListActivatedRulesInRuleGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListActivatedRulesInRuleGroupOutput) GoString() string {
	return s.String()
}

// SetActivatedRules sets the ActivatedRules field's value.
func (s *ListActivatedRulesInRuleGroupOutput) SetActivatedRules(v []*ActivatedRule) *ListActivatedRulesInRuleGroupOutput {
	s.ActivatedRules = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListActivatedRulesInRuleGroupOutput) SetNextMarker(v string) *ListActivatedRulesInRuleGroupOutput {
	s.NextMarker = &v
	return s
}

type ListByteMatchSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of ByteMatchSet objects that you want AWS WAF to return
	// for this request. If you have more ByteMatchSets objects than the number
	// you specify for Limit, the response includes a NextMarker value that you
	// can use to get another batch of ByteMatchSet objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more ByteMatchSets than the
	// value of Limit, AWS WAF returns a NextMarker value in the response that allows
	// you to list another group of ByteMatchSets. For the second and subsequent
	// ListByteMatchSets requests, specify the value of NextMarker from the previous
	// response to get information about another batch of ByteMatchSets.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListByteMatchSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListByteMatchSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListByteMatchSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListByteMatchSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListByteMatchSetsInput) SetLimit(v int64) *ListByteMatchSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListByteMatchSetsInput) SetNextMarker(v string) *ListByteMatchSetsInput {
	s.NextMarker = &v
	return s
}

type ListByteMatchSetsOutput struct {
	_ struct{} `type:"structure"`

	// An array of ByteMatchSetSummary objects.
	ByteMatchSets []*ByteMatchSetSummary `type:"list"`

	// If you have more ByteMatchSet objects than the number that you specified
	// for Limit in the request, the response includes a NextMarker value. To list
	// more ByteMatchSet objects, submit another ListByteMatchSets request, and
	// specify the NextMarker value from the response in the NextMarker value in
	// the next request.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListByteMatchSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListByteMatchSetsOutput) GoString() string {
	return s.String()
}

// SetByteMatchSets sets the ByteMatchSets field's value.
func (s *ListByteMatchSetsOutput) SetByteMatchSets(v []*ByteMatchSetSummary) *ListByteMatchSetsOutput {
	s.ByteMatchSets = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListByteMatchSetsOutput) SetNextMarker(v string) *ListByteMatchSetsOutput {
	s.NextMarker = &v
	return s
}

type ListGeoMatchSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of GeoMatchSet objects that you want AWS WAF to return
	// for this request. If you have more GeoMatchSet objects than the number you
	// specify for Limit, the response includes a NextMarker value that you can
	// use to get another batch of GeoMatchSet objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more GeoMatchSets than the
	// value of Limit, AWS WAF returns a NextMarker value in the response that allows
	// you to list another group of GeoMatchSet objects. For the second and subsequent
	// ListGeoMatchSets requests, specify the value of NextMarker from the previous
	// response to get information about another batch of GeoMatchSet objects.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListGeoMatchSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListGeoMatchSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListGeoMatchSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListGeoMatchSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListGeoMatchSetsInput) SetLimit(v int64) *ListGeoMatchSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListGeoMatchSetsInput) SetNextMarker(v string) *ListGeoMatchSetsInput {
	s.NextMarker = &v
	return s
}

type ListGeoMatchSetsOutput struct {
	_ struct{} `type:"structure"`

	// An array of GeoMatchSetSummary objects.
	GeoMatchSets []*GeoMatchSetSummary `type:"list"`

	// If you have more GeoMatchSet objects than the number that you specified for
	// Limit in the request, the response includes a NextMarker value. To list more
	// GeoMatchSet objects, submit another ListGeoMatchSets request, and specify
	// the NextMarker value from the response in the NextMarker value in the next
	// request.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListGeoMatchSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListGeoMatchSetsOutput) GoString() string {
	return s.String()
}

// SetGeoMatchSets sets the GeoMatchSets field's value.
func (s *ListGeoMatchSetsOutput) SetGeoMatchSets(v []*GeoMatchSetSummary) *ListGeoMatchSetsOutput {
	s.GeoMatchSets = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListGeoMatchSetsOutput) SetNextMarker(v string) *ListGeoMatchSetsOutput {
	s.NextMarker = &v
	return s
}

type ListIPSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of IPSet objects that you want AWS WAF to return for
	// this request. If you have more IPSet objects than the number you specify
	// for Limit, the response includes a NextMarker value that you can use to get
	// another batch of IPSet objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more IPSets than the value
	// of Limit, AWS WAF returns a NextMarker value in the response that allows
	// you to list another group of IPSets. For the second and subsequent ListIPSets
	// requests, specify the value of NextMarker from the previous response to get
	// information about another batch of IPSets.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListIPSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListIPSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListIPSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListIPSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListIPSetsInput) SetLimit(v int64) *ListIPSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListIPSetsInput) SetNextMarker(v string) *ListIPSetsInput {
	s.NextMarker = &v
	return s
}

type ListIPSetsOutput struct {
	_ struct{} `type:"structure"`

	// An array of IPSetSummary objects.
	IPSets []*IPSetSummary `type:"list"`

	// If you have more IPSet objects than the number that you specified for Limit
	// in the request, the response includes a NextMarker value. To list more IPSet
	// objects, submit another ListIPSets request, and specify the NextMarker value
	// from the response in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListIPSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListIPSetsOutput) GoString() string {
	return s.String()
}

// SetIPSets sets the IPSets field's value.
func (s *ListIPSetsOutput) SetIPSets(v []*IPSetSummary) *ListIPSetsOutput {
	s.IPSets = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListIPSetsOutput) SetNextMarker(v string) *ListIPSetsOutput {
	s.NextMarker = &v
	return s
}

type ListLoggingConfigurationsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of LoggingConfigurations that you want AWS WAF to return
	// for this request. If you have more LoggingConfigurations than the number
	// that you specify for Limit, the response includes a NextMarker value that
	// you can use to get another batch of LoggingConfigurations.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more LoggingConfigurations
	// than the value of Limit, AWS WAF returns a NextMarker value in the response
	// that allows you to list another group of LoggingConfigurations. For the second
	// and subsequent ListLoggingConfigurations requests, specify the value of NextMarker
	// from the previous response to get information about another batch of ListLoggingConfigurations.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListLoggingConfigurationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListLoggingConfigurationsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListLoggingConfigurationsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListLoggingConfigurationsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListLoggingConfigurationsInput) SetLimit(v int64) *ListLoggingConfigurationsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListLoggingConfigurationsInput) SetNextMarker(v string) *ListLoggingConfigurationsInput {
	s.NextMarker = &v
	return s
}

type ListLoggingConfigurationsOutput struct {
	_ struct{} `type:"structure"`

	// An array of LoggingConfiguration objects.
	LoggingConfigurations []*LoggingConfiguration `type:"list"`

	// If you have more LoggingConfigurations than the number that you specified
	// for Limit in the request, the response includes a NextMarker value. To list
	// more LoggingConfigurations, submit another ListLoggingConfigurations request,
	// and specify the NextMarker value from the response in the NextMarker value
	// in the next request.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListLoggingConfigurationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListLoggingConfigurationsOutput) GoString() string {
	return s.String()
}

// SetLoggingConfigurations sets the LoggingConfigurations field's value.
func (s *ListLoggingConfigurationsOutput) SetLoggingConfigurations(v []*LoggingConfiguration) *ListLoggingConfigurationsOutput {
	s.LoggingConfigurations = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListLoggingConfigurationsOutput) SetNextMarker(v string) *ListLoggingConfigurationsOutput {
	s.NextMarker = &v
	return s
}

type ListRateBasedRulesInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of Rules that you want AWS WAF to return for this request.
	// If you have more Rules than the number that you specify for Limit, the response
	// includes a NextMarker value that you can use to get another batch of Rules.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more Rules than the value of
	// Limit, AWS WAF returns a NextMarker value in the response that allows you
	// to list another group of Rules. For the second and subsequent ListRateBasedRules
	// requests, specify the value of NextMarker from the previous response to get
	// information about another batch of Rules.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListRateBasedRulesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRateBasedRulesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRateBasedRulesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRateBasedRulesInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListRateBasedRulesInput) SetLimit(v int64) *ListRateBasedRulesInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRateBasedRulesInput) SetNextMarker(v string) *ListRateBasedRulesInput {
	s.NextMarker = &v
	return s
}

type ListRateBasedRulesOutput struct {
	_ struct{} `type:"structure"`

	// If you have more Rules than the number that you specified for Limit in the
	// request, the response includes a NextMarker value. To list more Rules, submit
	// another ListRateBasedRules request, and specify the NextMarker value from
	// the response in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of RuleSummary objects.
	Rules []*RuleSummary `type:"list"`
}

// String returns the string representation
func (s ListRateBasedRulesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRateBasedRulesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRateBasedRulesOutput) SetNextMarker(v string) *ListRateBasedRulesOutput {
	s.NextMarker = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *ListRateBasedRulesOutput) SetRules(v []*RuleSummary) *ListRateBasedRulesOutput {
	s.Rules = v
	return s
}

type ListRegexMatchSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of RegexMatchSet objects that you want AWS WAF to return
	// for this request. If you have more RegexMatchSet objects than the number
	// you specify for Limit, the response includes a NextMarker value that you
	// can use to get another batch of RegexMatchSet objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more RegexMatchSet objects
	// than the value of Limit, AWS WAF returns a NextMarker value in the response
	// that allows you to list another group of ByteMatchSets. For the second and
	// subsequent ListRegexMatchSets requests, specify the value of NextMarker from
	// the previous response to get information about another batch of RegexMatchSet
	// objects.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListRegexMatchSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRegexMatchSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRegexMatchSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRegexMatchSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListRegexMatchSetsInput) SetLimit(v int64) *ListRegexMatchSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRegexMatchSetsInput) SetNextMarker(v string) *ListRegexMatchSetsInput {
	s.NextMarker = &v
	return s
}

type ListRegexMatchSetsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more RegexMatchSet objects than the number that you specified
	// for Limit in the request, the response includes a NextMarker value. To list
	// more RegexMatchSet objects, submit another ListRegexMatchSets request, and
	// specify the NextMarker value from the response in the NextMarker value in
	// the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of RegexMatchSetSummary objects.
	RegexMatchSets []*RegexMatchSetSummary `type:"list"`
}

// String returns the string representation
func (s ListRegexMatchSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRegexMatchSetsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRegexMatchSetsOutput) SetNextMarker(v string) *ListRegexMatchSetsOutput {
	s.NextMarker = &v
	return s
}

// SetRegexMatchSets sets the RegexMatchSets field's value.
func (s *ListRegexMatchSetsOutput) SetRegexMatchSets(v []*RegexMatchSetSummary) *ListRegexMatchSetsOutput {
	s.RegexMatchSets = v
	return s
}

type ListRegexPatternSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of RegexPatternSet objects that you want AWS WAF to
	// return for this request. If you have more RegexPatternSet objects than the
	// number you specify for Limit, the response includes a NextMarker value that
	// you can use to get another batch of RegexPatternSet objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more RegexPatternSet objects
	// than the value of Limit, AWS WAF returns a NextMarker value in the response
	// that allows you to list another group of RegexPatternSet objects. For the
	// second and subsequent ListRegexPatternSets requests, specify the value of
	// NextMarker from the previous response to get information about another batch
	// of RegexPatternSet objects.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListRegexPatternSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRegexPatternSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRegexPatternSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRegexPatternSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListRegexPatternSetsInput) SetLimit(v int64) *ListRegexPatternSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRegexPatternSetsInput) SetNextMarker(v string) *ListRegexPatternSetsInput {
	s.NextMarker = &v
	return s
}

type ListRegexPatternSetsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more RegexPatternSet objects than the number that you specified
	// for Limit in the request, the response includes a NextMarker value. To list
	// more RegexPatternSet objects, submit another ListRegexPatternSets request,
	// and specify the NextMarker value from the response in the NextMarker value
	// in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of RegexPatternSetSummary objects.
	RegexPatternSets []*RegexPatternSetSummary `type:"list"`
}

// String returns the string representation
func (s ListRegexPatternSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRegexPatternSetsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRegexPatternSetsOutput) SetNextMarker(v string) *ListRegexPatternSetsOutput {
	s.NextMarker = &v
	return s
}

// SetRegexPatternSets sets the RegexPatternSets field's value.
func (s *ListRegexPatternSetsOutput) SetRegexPatternSets(v []*RegexPatternSetSummary) *ListRegexPatternSetsOutput {
	s.RegexPatternSets = v
	return s
}

type ListRuleGroupsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of RuleGroups that you want AWS WAF to return for this
	// request. If you have more RuleGroups than the number that you specify for
	// Limit, the response includes a NextMarker value that you can use to get another
	// batch of RuleGroups.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more RuleGroups than the value
	// of Limit, AWS WAF returns a NextMarker value in the response that allows
	// you to list another group of RuleGroups. For the second and subsequent ListRuleGroups
	// requests, specify the value of NextMarker from the previous response to get
	// information about another batch of RuleGroups.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListRuleGroupsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRuleGroupsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRuleGroupsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRuleGroupsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListRuleGroupsInput) SetLimit(v int64) *ListRuleGroupsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRuleGroupsInput) SetNextMarker(v string) *ListRuleGroupsInput {
	s.NextMarker = &v
	return s
}

type ListRuleGroupsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more RuleGroups than the number that you specified for Limit
	// in the request, the response includes a NextMarker value. To list more RuleGroups,
	// submit another ListRuleGroups request, and specify the NextMarker value from
	// the response in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of RuleGroup objects.
	RuleGroups []*RuleGroupSummary `type:"list"`
}

// String returns the string representation
func (s ListRuleGroupsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRuleGroupsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRuleGroupsOutput) SetNextMarker(v string) *ListRuleGroupsOutput {
	s.NextMarker = &v
	return s
}

// SetRuleGroups sets the RuleGroups field's value.
func (s *ListRuleGroupsOutput) SetRuleGroups(v []*RuleGroupSummary) *ListRuleGroupsOutput {
	s.RuleGroups = v
	return s
}

type ListRulesInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of Rules that you want AWS WAF to return for this request.
	// If you have more Rules than the number that you specify for Limit, the response
	// includes a NextMarker value that you can use to get another batch of Rules.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more Rules than the value of
	// Limit, AWS WAF returns a NextMarker value in the response that allows you
	// to list another group of Rules. For the second and subsequent ListRules requests,
	// specify the value of NextMarker from the previous response to get information
	// about another batch of Rules.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListRulesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRulesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRulesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRulesInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListRulesInput) SetLimit(v int64) *ListRulesInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRulesInput) SetNextMarker(v string) *ListRulesInput {
	s.NextMarker = &v
	return s
}

type ListRulesOutput struct {
	_ struct{} `type:"structure"`

	// If you have more Rules than the number that you specified for Limit in the
	// request, the response includes a NextMarker value. To list more Rules, submit
	// another ListRules request, and specify the NextMarker value from the response
	// in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of RuleSummary objects.
	Rules []*RuleSummary `type:"list"`
}

// String returns the string representation
func (s ListRulesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListRulesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRulesOutput) SetNextMarker(v string) *ListRulesOutput {
	s.NextMarker = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *ListRulesOutput) SetRules(v []*RuleSummary) *ListRulesOutput {
	s.Rules = v
	return s
}

type ListSizeConstraintSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of SizeConstraintSet objects that you want AWS WAF to
	// return for this request. If you have more SizeConstraintSets objects than
	// the number you specify for Limit, the response includes a NextMarker value
	// that you can use to get another batch of SizeConstraintSet objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more SizeConstraintSets than
	// the value of Limit, AWS WAF returns a NextMarker value in the response that
	// allows you to list another group of SizeConstraintSets. For the second and
	// subsequent ListSizeConstraintSets requests, specify the value of NextMarker
	// from the previous response to get information about another batch of SizeConstraintSets.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListSizeConstraintSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListSizeConstraintSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListSizeConstraintSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListSizeConstraintSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListSizeConstraintSetsInput) SetLimit(v int64) *ListSizeConstraintSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListSizeConstraintSetsInput) SetNextMarker(v string) *ListSizeConstraintSetsInput {
	s.NextMarker = &v
	return s
}

type ListSizeConstraintSetsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more SizeConstraintSet objects than the number that you specified
	// for Limit in the request, the response includes a NextMarker value. To list
	// more SizeConstraintSet objects, submit another ListSizeConstraintSets request,
	// and specify the NextMarker value from the response in the NextMarker value
	// in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of SizeConstraintSetSummary objects.
	SizeConstraintSets []*SizeConstraintSetSummary `type:"list"`
}

// String returns the string representation
func (s ListSizeConstraintSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListSizeConstraintSetsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListSizeConstraintSetsOutput) SetNextMarker(v string) *ListSizeConstraintSetsOutput {
	s.NextMarker = &v
	return s
}

// SetSizeConstraintSets sets the SizeConstraintSets field's value.
func (s *ListSizeConstraintSetsOutput) SetSizeConstraintSets(v []*SizeConstraintSetSummary) *ListSizeConstraintSetsOutput {
	s.SizeConstraintSets = v
	return s
}

// A request to list the SqlInjectionMatchSet objects created by the current
// AWS account.
type ListSqlInjectionMatchSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of SqlInjectionMatchSet objects that you want AWS WAF
	// to return for this request. If you have more SqlInjectionMatchSet objects
	// than the number you specify for Limit, the response includes a NextMarker
	// value that you can use to get another batch of Rules.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more SqlInjectionMatchSet objects
	// than the value of Limit, AWS WAF returns a NextMarker value in the response
	// that allows you to list another group of SqlInjectionMatchSets. For the second
	// and subsequent ListSqlInjectionMatchSets requests, specify the value of NextMarker
	// from the previous response to get information about another batch of SqlInjectionMatchSets.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListSqlInjectionMatchSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListSqlInjectionMatchSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListSqlInjectionMatchSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListSqlInjectionMatchSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListSqlInjectionMatchSetsInput) SetLimit(v int64) *ListSqlInjectionMatchSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListSqlInjectionMatchSetsInput) SetNextMarker(v string) *ListSqlInjectionMatchSetsInput {
	s.NextMarker = &v
	return s
}

// The response to a ListSqlInjectionMatchSets request.
type ListSqlInjectionMatchSetsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more SqlInjectionMatchSet objects than the number that you specified
	// for Limit in the request, the response includes a NextMarker value. To list
	// more SqlInjectionMatchSet objects, submit another ListSqlInjectionMatchSets
	// request, and specify the NextMarker value from the response in the NextMarker
	// value in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of SqlInjectionMatchSetSummary objects.
	SqlInjectionMatchSets []*SqlInjectionMatchSetSummary `type:"list"`
}

// String returns the string representation
func (s ListSqlInjectionMatchSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListSqlInjectionMatchSetsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListSqlInjectionMatchSetsOutput) SetNextMarker(v string) *ListSqlInjectionMatchSetsOutput {
	s.NextMarker = &v
	return s
}

// SetSqlInjectionMatchSets sets the SqlInjectionMatchSets field's value.
func (s *ListSqlInjectionMatchSetsOutput) SetSqlInjectionMatchSets(v []*SqlInjectionMatchSetSummary) *ListSqlInjectionMatchSetsOutput {
	s.SqlInjectionMatchSets = v
	return s
}

type ListSubscribedRuleGroupsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of subscribed rule groups that you want AWS WAF to return
	// for this request. If you have more objects than the number you specify for
	// Limit, the response includes a NextMarker value that you can use to get another
	// batch of objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more ByteMatchSetssubscribed
	// rule groups than the value of Limit, AWS WAF returns a NextMarker value in
	// the response that allows you to list another group of subscribed rule groups.
	// For the second and subsequent ListSubscribedRuleGroupsRequest requests, specify
	// the value of NextMarker from the previous response to get information about
	// another batch of subscribed rule groups.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListSubscribedRuleGroupsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListSubscribedRuleGroupsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListSubscribedRuleGroupsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListSubscribedRuleGroupsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListSubscribedRuleGroupsInput) SetLimit(v int64) *ListSubscribedRuleGroupsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListSubscribedRuleGroupsInput) SetNextMarker(v string) *ListSubscribedRuleGroupsInput {
	s.NextMarker = &v
	return s
}

type ListSubscribedRuleGroupsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more objects than the number that you specified for Limit in
	// the request, the response includes a NextMarker value. To list more objects,
	// submit another ListSubscribedRuleGroups request, and specify the NextMarker
	// value from the response in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of RuleGroup objects.
	RuleGroups []*SubscribedRuleGroupSummary `type:"list"`
}

// String returns the string representation
func (s ListSubscribedRuleGroupsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListSubscribedRuleGroupsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListSubscribedRuleGroupsOutput) SetNextMarker(v string) *ListSubscribedRuleGroupsOutput {
	s.NextMarker = &v
	return s
}

// SetRuleGroups sets the RuleGroups field's value.
func (s *ListSubscribedRuleGroupsOutput) SetRuleGroups(v []*SubscribedRuleGroupSummary) *ListSubscribedRuleGroupsOutput {
	s.RuleGroups = v
	return s
}

type ListWebACLsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of WebACL objects that you want AWS WAF to return for
	// this request. If you have more WebACL objects than the number that you specify
	// for Limit, the response includes a NextMarker value that you can use to get
	// another batch of WebACL objects.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more WebACL objects than the
	// number that you specify for Limit, AWS WAF returns a NextMarker value in
	// the response that allows you to list another group of WebACL objects. For
	// the second and subsequent ListWebACLs requests, specify the value of NextMarker
	// from the previous response to get information about another batch of WebACL
	// objects.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListWebACLsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListWebACLsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListWebACLsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListWebACLsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListWebACLsInput) SetLimit(v int64) *ListWebACLsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListWebACLsInput) SetNextMarker(v string) *ListWebACLsInput {
	s.NextMarker = &v
	return s
}

type ListWebACLsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more WebACL objects than the number that you specified for Limit
	// in the request, the response includes a NextMarker value. To list more WebACL
	// objects, submit another ListWebACLs request, and specify the NextMarker value
	// from the response in the NextMarker value in the next request.
	NextMarker *string `min:"1" type:"string"`

	// An array of WebACLSummary objects.
	WebACLs []*WebACLSummary `type:"list"`
}

// String returns the string representation
func (s ListWebACLsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListWebACLsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListWebACLsOutput) SetNextMarker(v string) *ListWebACLsOutput {
	s.NextMarker = &v
	return s
}

// SetWebACLs sets the WebACLs field's value.
func (s *ListWebACLsOutput) SetWebACLs(v []*WebACLSummary) *ListWebACLsOutput {
	s.WebACLs = v
	return s
}

// A request to list the XssMatchSet objects created by the current AWS account.
type ListXssMatchSetsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the number of XssMatchSet objects that you want AWS WAF to return
	// for this request. If you have more XssMatchSet objects than the number you
	// specify for Limit, the response includes a NextMarker value that you can
	// use to get another batch of Rules.
	Limit *int64 `type:"integer"`

	// If you specify a value for Limit and you have more XssMatchSet objects than
	// the value of Limit, AWS WAF returns a NextMarker value in the response that
	// allows you to list another group of XssMatchSets. For the second and subsequent
	// ListXssMatchSets requests, specify the value of NextMarker from the previous
	// response to get information about another batch of XssMatchSets.
	NextMarker *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListXssMatchSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListXssMatchSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListXssMatchSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListXssMatchSetsInput"}
	if s.NextMarker != nil && len(*s.NextMarker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLimit sets the Limit field's value.
func (s *ListXssMatchSetsInput) SetLimit(v int64) *ListXssMatchSetsInput {
	s.Limit = &v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListXssMatchSetsInput) SetNextMarker(v string) *ListXssMatchSetsInput {
	s.NextMarker = &v
	return s
}

// The response to a ListXssMatchSets request.
type ListXssMatchSetsOutput struct {
	_ struct{} `type:"structure"`

	// If you have more XssMatchSet objects than the number that you specified for
	// Limit in the request, the response includes a NextMarker value. To list more
	// XssMatchSet objects, submit another ListXssMatchSets request, and specify
	// the NextMarker value from the response in the NextMarker value in the next
	// request.
	NextMarker *string `min:"1" type:"string"`

	// An array of XssMatchSetSummary objects.
	XssMatchSets []*XssMatchSetSummary `type:"list"`
}

// String returns the string representation
func (s ListXssMatchSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListXssMatchSetsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListXssMatchSetsOutput) SetNextMarker(v string) *ListXssMatchSetsOutput {
	s.NextMarker = &v
	return s
}

// SetXssMatchSets sets the XssMatchSets field's value.
func (s *ListXssMatchSetsOutput) SetXssMatchSets(v []*XssMatchSetSummary) *ListXssMatchSetsOutput {
	s.XssMatchSets = v
	return s
}

// The Amazon Kinesis Data Firehose, RedactedFields information, and the web
// ACL Amazon Resource Name (ARN).
type LoggingConfiguration struct {
	_ struct{} `type:"structure"`

	// An array of Amazon Kinesis Data Firehose ARNs.
	//
	// LogDestinationConfigs is a required field
	LogDestinationConfigs []*string `min:"1" type:"list" required:"true"`

	// The parts of the request that you want redacted from the logs. For example,
	// if you redact the cookie field, the cookie field in the firehose will be
	// xxx.
	RedactedFields []*FieldToMatch `type:"list"`

	// The Amazon Resource Name (ARN) of the web ACL that you want to associate
	// with LogDestinationConfigs.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s LoggingConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s LoggingConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LoggingConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LoggingConfiguration"}
	if s.LogDestinationConfigs == nil {
		invalidParams.Add(request.NewErrParamRequired("LogDestinationConfigs"))
	}
	if s.LogDestinationConfigs != nil && len(s.LogDestinationConfigs) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("LogDestinationConfigs", 1))
	}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}
	if s.RedactedFields != nil {
		for i, v := range s.RedactedFields {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "RedactedFields", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLogDestinationConfigs sets the LogDestinationConfigs field's value.
func (s *LoggingConfiguration) SetLogDestinationConfigs(v []*string) *LoggingConfiguration {
	s.LogDestinationConfigs = v
	return s
}

// SetRedactedFields sets the RedactedFields field's value.
func (s *LoggingConfiguration) SetRedactedFields(v []*FieldToMatch) *LoggingConfiguration {
	s.RedactedFields = v
	return s
}

// SetResourceArn sets the ResourceArn field's value.
func (s *LoggingConfiguration) SetResourceArn(v string) *LoggingConfiguration {
	s.ResourceArn = &v
	return s
}

// Specifies the ByteMatchSet, IPSet, SqlInjectionMatchSet, XssMatchSet, RegexMatchSet,
// GeoMatchSet, and SizeConstraintSet objects that you want to add to a Rule
// and, for each object, indicates whether you want to negate the settings,
// for example, requests that do NOT originate from the IP address 192.0.2.44.
type Predicate struct {
	_ struct{} `type:"structure"`

	// A unique identifier for a predicate in a Rule, such as ByteMatchSetId or
	// IPSetId. The ID is returned by the corresponding Create or List command.
	//
	// DataId is a required field
	DataId *string `min:"1" type:"string" required:"true"`

	// Set Negated to False if you want AWS WAF to allow, block, or count requests
	// based on the settings in the specified ByteMatchSet, IPSet, SqlInjectionMatchSet,
	// XssMatchSet, RegexMatchSet, GeoMatchSet, or SizeConstraintSet. For example,
	// if an IPSet includes the IP address 192.0.2.44, AWS WAF will allow or block
	// requests based on that IP address.
	//
	// Set Negated to True if you want AWS WAF to allow or block a request based
	// on the negation of the settings in the ByteMatchSet, IPSet, SqlInjectionMatchSet,
	// XssMatchSet, RegexMatchSet, GeoMatchSet, or SizeConstraintSet. For example,
	// if an IPSet includes the IP address 192.0.2.44, AWS WAF will allow, block,
	// or count requests based on all IP addresses except192.0.2.44.
	//
	// Negated is a required field
	Negated *bool `type:"boolean" required:"true"`

	// The type of predicate in a Rule, such as ByteMatch or IPSet.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"PredicateType"`
}

// String returns the string representation
func (s Predicate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Predicate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Predicate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Predicate"}
	if s.DataId == nil {
		invalidParams.Add(request.NewErrParamRequired("DataId"))
	}
	if s.DataId != nil && len(*s.DataId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DataId", 1))
	}
	if s.Negated == nil {
		invalidParams.Add(request.NewErrParamRequired("Negated"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDataId sets the DataId field's value.
func (s *Predicate) SetDataId(v string) *Predicate {
	s.DataId = &v
	return s
}

// SetNegated sets the Negated field's value.
func (s *Predicate) SetNegated(v bool) *Predicate {
	s.Negated = &v
	return s
}

// SetType sets the Type field's value.
func (s *Predicate) SetType(v string) *Predicate {
	s.Type = &v
	return s
}

type PutLoggingConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Kinesis Data Firehose that contains the inspected traffic information,
	// the redacted fields details, and the Amazon Resource Name (ARN) of the web
	// ACL to monitor.
	//
	// LoggingConfiguration is a required field
	LoggingConfiguration *LoggingConfiguration `type:"structure" required:"true"`
}

// String returns the string representation
func (s PutLoggingConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s PutLoggingConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutLoggingConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutLoggingConfigurationInput"}
	if s.LoggingConfiguration == nil {
		invalidParams.Add(request.NewErrParamRequired("LoggingConfiguration"))
	}
	if s.LoggingConfiguration != nil {
		if err := s.LoggingConfiguration.Validate(); err != nil {
			invalidParams.AddNested("LoggingConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLoggingConfiguration sets the LoggingConfiguration field's value.
func (s *PutLoggingConfigurationInput) SetLoggingConfiguration(v *LoggingConfiguration) *PutLoggingConfigurationInput {
	s.LoggingConfiguration = v
	return s
}

type PutLoggingConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// The LoggingConfiguration that you submitted in the request.
	LoggingConfiguration *LoggingConfiguration `type:"structure"`
}

// String returns the string representation
func (s PutLoggingConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s PutLoggingConfigurationOutput) GoString() string {
	return s.String()
}

// SetLoggingConfiguration sets the LoggingConfiguration field's value.
func (s *PutLoggingConfigurationOutput) SetLoggingConfiguration(v *LoggingConfiguration) *PutLoggingConfigurationOutput {
	s.LoggingConfiguration = v
	return s
}

type PutPermissionPolicyInput struct {
	_ struct{} `type:"structure"`

	// The policy to attach to the specified RuleGroup.
	//
	// Policy is a required field
	Policy *string `min:"1" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the RuleGroup to which you want to attach
	// the policy.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s PutPermissionPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s PutPermissionPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutPermissionPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutPermissionPolicyInput"}
	if s.Policy == nil {
		invalidParams.Add(request.NewErrParamRequired("Policy"))
	}
	if s.Policy != nil && len(*s.Policy) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Policy", 1))
	}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicy sets the Policy field's value.
func (s *PutPermissionPolicyInput) SetPolicy(v string) *PutPermissionPolicyInput {
	s.Policy = &v
	return s
}

// SetResourceArn sets the ResourceArn field's value.
func (s *PutPermissionPolicyInput) SetResourceArn(v string) *PutPermissionPolicyInput {
	s.ResourceArn = &v
	return s
}

type PutPermissionPolicyOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s PutPermissionPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s PutPermissionPolicyOutput) GoString() string {
	return s.String()
}

// A RateBasedRule is identical to a regular Rule, with one addition: a RateBasedRule
// counts the number of requests that arrive from a specified IP address every
// five minutes. For example, based on recent requests that you've seen from
// an attacker, you might create a RateBasedRule that includes the following
// conditions:
//
//    * The requests come from 192.0.2.44.
//
//    * They contain the value BadBot in the User-Agent header.
//
// In the rule, you also define the rate limit as 15,000.
//
// Requests that meet both of these conditions and exceed 15,000 requests every
// five minutes trigger the rule's action (block or count), which is defined
// in the web ACL.
type RateBasedRule struct {
	_ struct{} `type:"structure"`

	// The Predicates object contains one Predicate element for each ByteMatchSet,
	// IPSet, or SqlInjectionMatchSet object that you want to include in a RateBasedRule.
	//
	// MatchPredicates is a required field
	MatchPredicates []*Predicate `type:"list" required:"true"`

	// A friendly name or description for the metrics for a RateBasedRule. The name
	// can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain whitespace. You can't change the name of the metric after you create
	// the RateBasedRule.
	MetricName *string `type:"string"`

	// A friendly name or description for a RateBasedRule. You can't change the
	// name of a RateBasedRule after you create it.
	Name *string `min:"1" type:"string"`

	// The field that AWS WAF uses to determine if requests are likely arriving
	// from single source and thus subject to rate monitoring. The only valid value
	// for RateKey is IP. IP indicates that requests arriving from the same IP address
	// are subject to the RateLimit that is specified in the RateBasedRule.
	//
	// RateKey is a required field
	RateKey *string `type:"string" required:"true" enum:"RateKey"`

	// The maximum number of requests, which have an identical value in the field
	// specified by the RateKey, allowed in a five-minute period. If the number
	// of requests exceeds the RateLimit and the other predicates specified in the
	// rule are also met, AWS WAF triggers the action that is specified for this
	// rule.
	//
	// RateLimit is a required field
	RateLimit *int64 `min:"2000" type:"long" required:"true"`

	// A unique identifier for a RateBasedRule. You use RuleId to get more information
	// about a RateBasedRule (see GetRateBasedRule), update a RateBasedRule (see
	// UpdateRateBasedRule), insert a RateBasedRule into a WebACL or delete one
	// from a WebACL (see UpdateWebACL), or delete a RateBasedRule from AWS WAF
	// (see DeleteRateBasedRule).
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RateBasedRule) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RateBasedRule) GoString() string {
	return s.String()
}

// SetMatchPredicates sets the MatchPredicates field's value.
func (s *RateBasedRule) SetMatchPredicates(v []*Predicate) *RateBasedRule {
	s.MatchPredicates = v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *RateBasedRule) SetMetricName(v string) *RateBasedRule {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *RateBasedRule) SetName(v string) *RateBasedRule {
	s.Name = &v
	return s
}

// SetRateKey sets the RateKey field's value.
func (s *RateBasedRule) SetRateKey(v string) *RateBasedRule {
	s.RateKey = &v
	return s
}

// SetRateLimit sets the RateLimit field's value.
func (s *RateBasedRule) SetRateLimit(v int64) *RateBasedRule {
	s.RateLimit = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *RateBasedRule) SetRuleId(v string) *RateBasedRule {
	s.RuleId = &v
	return s
}

// In a GetRegexMatchSet request, RegexMatchSet is a complex type that contains
// the RegexMatchSetId and Name of a RegexMatchSet, and the values that you
// specified when you updated the RegexMatchSet.
//
// The values are contained in a RegexMatchTuple object, which specify the parts
// of web requests that you want AWS WAF to inspect and the values that you
// want AWS WAF to search for. If a RegexMatchSet contains more than one RegexMatchTuple
// object, a request needs to match the settings in only one ByteMatchTuple
// to be considered a match.
type RegexMatchSet struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the RegexMatchSet. You can't change Name
	// after you create a RegexMatchSet.
	Name *string `min:"1" type:"string"`

	// The RegexMatchSetId for a RegexMatchSet. You use RegexMatchSetId to get information
	// about a RegexMatchSet (see GetRegexMatchSet), update a RegexMatchSet (see
	// UpdateRegexMatchSet), insert a RegexMatchSet into a Rule or delete one from
	// a Rule (see UpdateRule), and delete a RegexMatchSet from AWS WAF (see DeleteRegexMatchSet).
	//
	// RegexMatchSetId is returned by CreateRegexMatchSet and by ListRegexMatchSets.
	RegexMatchSetId *string `min:"1" type:"string"`

	// Contains an array of RegexMatchTuple objects. Each RegexMatchTuple object
	// contains:
	//
	//    * The part of a web request that you want AWS WAF to inspect, such as
	//    a query string or the value of the User-Agent header.
	//
	//    * The identifier of the pattern (a regular expression) that you want AWS
	//    WAF to look for. For more information, see RegexPatternSet.
	//
	//    * Whether to perform any conversions on the request, such as converting
	//    it to lowercase, before inspecting it for the specified string.
	RegexMatchTuples []*RegexMatchTuple `type:"list"`
}

// String returns the string representation
func (s RegexMatchSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexMatchSet) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *RegexMatchSet) SetName(v string) *RegexMatchSet {
	s.Name = &v
	return s
}

// SetRegexMatchSetId sets the RegexMatchSetId field's value.
func (s *RegexMatchSet) SetRegexMatchSetId(v string) *RegexMatchSet {
	s.RegexMatchSetId = &v
	return s
}

// SetRegexMatchTuples sets the RegexMatchTuples field's value.
func (s *RegexMatchSet) SetRegexMatchTuples(v []*RegexMatchTuple) *RegexMatchSet {
	s.RegexMatchTuples = v
	return s
}

// Returned by ListRegexMatchSets. Each RegexMatchSetSummary object includes
// the Name and RegexMatchSetId for one RegexMatchSet.
type RegexMatchSetSummary struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the RegexMatchSet. You can't change Name
	// after you create a RegexMatchSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The RegexMatchSetId for a RegexMatchSet. You use RegexMatchSetId to get information
	// about a RegexMatchSet, update a RegexMatchSet, remove a RegexMatchSet from
	// a Rule, and delete a RegexMatchSet from AWS WAF.
	//
	// RegexMatchSetId is returned by CreateRegexMatchSet and by ListRegexMatchSets.
	//
	// RegexMatchSetId is a required field
	RegexMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RegexMatchSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexMatchSetSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *RegexMatchSetSummary) SetName(v string) *RegexMatchSetSummary {
	s.Name = &v
	return s
}

// SetRegexMatchSetId sets the RegexMatchSetId field's value.
func (s *RegexMatchSetSummary) SetRegexMatchSetId(v string) *RegexMatchSetSummary {
	s.RegexMatchSetId = &v
	return s
}

// In an UpdateRegexMatchSet request, RegexMatchSetUpdate specifies whether
// to insert or delete a RegexMatchTuple and includes the settings for the RegexMatchTuple.
type RegexMatchSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specifies whether to insert or delete a RegexMatchTuple.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// Information about the part of a web request that you want AWS WAF to inspect
	// and the identifier of the regular expression (regex) pattern that you want
	// AWS WAF to search for. If you specify DELETE for the value of Action, the
	// RegexMatchTuple values must exactly match the values in the RegexMatchTuple
	// that you want to delete from the RegexMatchSet.
	//
	// RegexMatchTuple is a required field
	RegexMatchTuple *RegexMatchTuple `type:"structure" required:"true"`
}

// String returns the string representation
func (s RegexMatchSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexMatchSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegexMatchSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegexMatchSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.RegexMatchTuple == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexMatchTuple"))
	}
	if s.RegexMatchTuple != nil {
		if err := s.RegexMatchTuple.Validate(); err != nil {
			invalidParams.AddNested("RegexMatchTuple", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *RegexMatchSetUpdate) SetAction(v string) *RegexMatchSetUpdate {
	s.Action = &v
	return s
}

// SetRegexMatchTuple sets the RegexMatchTuple field's value.
func (s *RegexMatchSetUpdate) SetRegexMatchTuple(v *RegexMatchTuple) *RegexMatchSetUpdate {
	s.RegexMatchTuple = v
	return s
}

// The regular expression pattern that you want AWS WAF to search for in web
// requests, the location in requests that you want AWS WAF to search, and other
// settings. Each RegexMatchTuple object contains:
//
//    * The part of a web request that you want AWS WAF to inspect, such as
//    a query string or the value of the User-Agent header.
//
//    * The identifier of the pattern (a regular expression) that you want AWS
//    WAF to look for. For more information, see RegexPatternSet.
//
//    * Whether to perform any conversions on the request, such as converting
//    it to lowercase, before inspecting it for the specified string.
type RegexMatchTuple struct {
	_ struct{} `type:"structure"`

	// Specifies where in a web request to look for the RegexPatternSet.
	//
	// FieldToMatch is a required field
	FieldToMatch *FieldToMatch `type:"structure" required:"true"`

	// The RegexPatternSetId for a RegexPatternSet. You use RegexPatternSetId to
	// get information about a RegexPatternSet (see GetRegexPatternSet), update
	// a RegexPatternSet (see UpdateRegexPatternSet), insert a RegexPatternSet into
	// a RegexMatchSet or delete one from a RegexMatchSet (see UpdateRegexMatchSet),
	// and delete an RegexPatternSet from AWS WAF (see DeleteRegexPatternSet).
	//
	// RegexPatternSetId is returned by CreateRegexPatternSet and by ListRegexPatternSets.
	//
	// RegexPatternSetId is a required field
	RegexPatternSetId *string `min:"1" type:"string" required:"true"`

	// Text transformations eliminate some of the unusual formatting that attackers
	// use in web requests in an effort to bypass AWS WAF. If you specify a transformation,
	// AWS WAF performs the transformation on RegexPatternSet before inspecting
	// a request for a match.
	//
	// You can only specify a single type of TextTransformation.
	//
	// CMD_LINE
	//
	// When you're concerned that attackers are injecting an operating system commandline
	// command and using unusual formatting to disguise some or all of the command,
	// use this option to perform the following transformations:
	//
	//    * Delete the following characters: \ " ' ^
	//
	//    * Delete spaces before the following characters: / (
	//
	//    * Replace the following characters with a space: , ;
	//
	//    * Replace multiple spaces with one space
	//
	//    * Convert uppercase letters (A-Z) to lowercase (a-z)
	//
	// COMPRESS_WHITE_SPACE
	//
	// Use this option to replace the following characters with a space character
	// (decimal 32):
	//
	//    * \f, formfeed, decimal 12
	//
	//    * \t, tab, decimal 9
	//
	//    * \n, newline, decimal 10
	//
	//    * \r, carriage return, decimal 13
	//
	//    * \v, vertical tab, decimal 11
	//
	//    * non-breaking space, decimal 160
	//
	// COMPRESS_WHITE_SPACE also replaces multiple spaces with one space.
	//
	// HTML_ENTITY_DECODE
	//
	// Use this option to replace HTML-encoded characters with unencoded characters.
	// HTML_ENTITY_DECODE performs the following operations:
	//
	//    * Replaces (ampersand)quot; with "
	//
	//    * Replaces (ampersand)nbsp; with a non-breaking space, decimal 160
	//
	//    * Replaces (ampersand)lt; with a "less than" symbol
	//
	//    * Replaces (ampersand)gt; with >
	//
	//    * Replaces characters that are represented in hexadecimal format, (ampersand)#xhhhh;,
	//    with the corresponding characters
	//
	//    * Replaces characters that are represented in decimal format, (ampersand)#nnnn;,
	//    with the corresponding characters
	//
	// LOWERCASE
	//
	// Use this option to convert uppercase letters (A-Z) to lowercase (a-z).
	//
	// URL_DECODE
	//
	// Use this option to decode a URL-encoded value.
	//
	// NONE
	//
	// Specify NONE if you don't want to perform any text transformations.
	//
	// TextTransformation is a required field
	TextTransformation *string `type:"string" required:"true" enum:"TextTransformation"`
}

// String returns the string representation
func (s RegexMatchTuple) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexMatchTuple) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegexMatchTuple) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegexMatchTuple"}
	if s.FieldToMatch == nil {
		invalidParams.Add(request.NewErrParamRequired("FieldToMatch"))
	}
	if s.RegexPatternSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexPatternSetId"))
	}
	if s.RegexPatternSetId != nil && len(*s.RegexPatternSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexPatternSetId", 1))
	}
	if s.TextTransformation == nil {
		invalidParams.Add(request.NewErrParamRequired("TextTransformation"))
	}
	if s.FieldToMatch != nil {
		if err := s.FieldToMatch.Validate(); err != nil {
			invalidParams.AddNested("FieldToMatch", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFieldToMatch sets the FieldToMatch field's value.
func (s *RegexMatchTuple) SetFieldToMatch(v *FieldToMatch) *RegexMatchTuple {
	s.FieldToMatch = v
	return s
}

// SetRegexPatternSetId sets the RegexPatternSetId field's value.
func (s *RegexMatchTuple) SetRegexPatternSetId(v string) *RegexMatchTuple {
	s.RegexPatternSetId = &v
	return s
}

// SetTextTransformation sets the TextTransformation field's value.
func (s *RegexMatchTuple) SetTextTransformation(v string) *RegexMatchTuple {
	s.TextTransformation = &v
	return s
}

// The RegexPatternSet specifies the regular expression (regex) pattern that
// you want AWS WAF to search for, such as B[a@]dB[o0]t. You can then configure
// AWS WAF to reject those requests.
type RegexPatternSet struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the RegexPatternSet. You can't change Name
	// after you create a RegexPatternSet.
	Name *string `min:"1" type:"string"`

	// The identifier for the RegexPatternSet. You use RegexPatternSetId to get
	// information about a RegexPatternSet, update a RegexPatternSet, remove a RegexPatternSet
	// from a RegexMatchSet, and delete a RegexPatternSet from AWS WAF.
	//
	// RegexMatchSetId is returned by CreateRegexPatternSet and by ListRegexPatternSets.
	//
	// RegexPatternSetId is a required field
	RegexPatternSetId *string `min:"1" type:"string" required:"true"`

	// Specifies the regular expression (regex) patterns that you want AWS WAF to
	// search for, such as B[a@]dB[o0]t.
	//
	// RegexPatternStrings is a required field
	RegexPatternStrings []*string `type:"list" required:"true"`
}

// String returns the string representation
func (s RegexPatternSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexPatternSet) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *RegexPatternSet) SetName(v string) *RegexPatternSet {
	s.Name = &v
	return s
}

// SetRegexPatternSetId sets the RegexPatternSetId field's value.
func (s *RegexPatternSet) SetRegexPatternSetId(v string) *RegexPatternSet {
	s.RegexPatternSetId = &v
	return s
}

// SetRegexPatternStrings sets the RegexPatternStrings field's value.
func (s *RegexPatternSet) SetRegexPatternStrings(v []*string) *RegexPatternSet {
	s.RegexPatternStrings = v
	return s
}

// Returned by ListRegexPatternSets. Each RegexPatternSetSummary object includes
// the Name and RegexPatternSetId for one RegexPatternSet.
type RegexPatternSetSummary struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the RegexPatternSet. You can't change Name
	// after you create a RegexPatternSet.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The RegexPatternSetId for a RegexPatternSet. You use RegexPatternSetId to
	// get information about a RegexPatternSet, update a RegexPatternSet, remove
	// a RegexPatternSet from a RegexMatchSet, and delete a RegexPatternSet from
	// AWS WAF.
	//
	// RegexPatternSetId is returned by CreateRegexPatternSet and by ListRegexPatternSets.
	//
	// RegexPatternSetId is a required field
	RegexPatternSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RegexPatternSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexPatternSetSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *RegexPatternSetSummary) SetName(v string) *RegexPatternSetSummary {
	s.Name = &v
	return s
}

// SetRegexPatternSetId sets the RegexPatternSetId field's value.
func (s *RegexPatternSetSummary) SetRegexPatternSetId(v string) *RegexPatternSetSummary {
	s.RegexPatternSetId = &v
	return s
}

// In an UpdateRegexPatternSet request, RegexPatternSetUpdate specifies whether
// to insert or delete a RegexPatternString and includes the settings for the
// RegexPatternString.
type RegexPatternSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specifies whether to insert or delete a RegexPatternString.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// Specifies the regular expression (regex) pattern that you want AWS WAF to
	// search for, such as B[a@]dB[o0]t.
	//
	// RegexPatternString is a required field
	RegexPatternString *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RegexPatternSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegexPatternSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegexPatternSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegexPatternSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.RegexPatternString == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexPatternString"))
	}
	if s.RegexPatternString != nil && len(*s.RegexPatternString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexPatternString", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *RegexPatternSetUpdate) SetAction(v string) *RegexPatternSetUpdate {
	s.Action = &v
	return s
}

// SetRegexPatternString sets the RegexPatternString field's value.
func (s *RegexPatternSetUpdate) SetRegexPatternString(v string) *RegexPatternSetUpdate {
	s.RegexPatternString = &v
	return s
}

// A combination of ByteMatchSet, IPSet, and/or SqlInjectionMatchSet objects
// that identify the web requests that you want to allow, block, or count. For
// example, you might create a Rule that includes the following predicates:
//
//    * An IPSet that causes AWS WAF to search for web requests that originate
//    from the IP address 192.0.2.44
//
//    * A ByteMatchSet that causes AWS WAF to search for web requests for which
//    the value of the User-Agent header is BadBot.
//
// To match the settings in this Rule, a request must originate from 192.0.2.44
// AND include a User-Agent header for which the value is BadBot.
type Rule struct {
	_ struct{} `type:"structure"`

	// A friendly name or description for the metrics for this Rule. The name can
	// contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't contain
	// whitespace. You can't change MetricName after you create the Rule.
	MetricName *string `type:"string"`

	// The friendly name or description for the Rule. You can't change the name
	// of a Rule after you create it.
	Name *string `min:"1" type:"string"`

	// The Predicates object contains one Predicate element for each ByteMatchSet,
	// IPSet, or SqlInjectionMatchSet object that you want to include in a Rule.
	//
	// Predicates is a required field
	Predicates []*Predicate `type:"list" required:"true"`

	// A unique identifier for a Rule. You use RuleId to get more information about
	// a Rule (see GetRule), update a Rule (see UpdateRule), insert a Rule into
	// a WebACL or delete a one from a WebACL (see UpdateWebACL), or delete a Rule
	// from AWS WAF (see DeleteRule).
	//
	// RuleId is returned by CreateRule and by ListRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s Rule) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Rule) GoString() string {
	return s.String()
}

// SetMetricName sets the MetricName field's value.
func (s *Rule) SetMetricName(v string) *Rule {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *Rule) SetName(v string) *Rule {
	s.Name = &v
	return s
}

// SetPredicates sets the Predicates field's value.
func (s *Rule) SetPredicates(v []*Predicate) *Rule {
	s.Predicates = v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *Rule) SetRuleId(v string) *Rule {
	s.RuleId = &v
	return s
}

// A collection of predefined rules that you can add to a web ACL.
//
// Rule groups are subject to the following limits:
//
//    * Three rule groups per account. You can request an increase to this limit
//    by contacting customer support.
//
//    * One rule group per web ACL.
//
//    * Ten rules per rule group.
type RuleGroup struct {
	_ struct{} `type:"structure"`

	// A friendly name or description for the metrics for this RuleGroup. The name
	// can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain whitespace. You can't change the name of the metric after you create
	// the RuleGroup.
	MetricName *string `type:"string"`

	// The friendly name or description for the RuleGroup. You can't change the
	// name of a RuleGroup after you create it.
	Name *string `min:"1" type:"string"`

	// A unique identifier for a RuleGroup. You use RuleGroupId to get more information
	// about a RuleGroup (see GetRuleGroup), update a RuleGroup (see UpdateRuleGroup),
	// insert a RuleGroup into a WebACL or delete a one from a WebACL (see UpdateWebACL),
	// or delete a RuleGroup from AWS WAF (see DeleteRuleGroup).
	//
	// RuleGroupId is returned by CreateRuleGroup and by ListRuleGroups.
	//
	// RuleGroupId is a required field
	RuleGroupId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RuleGroup) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RuleGroup) GoString() string {
	return s.String()
}

// SetMetricName sets the MetricName field's value.
func (s *RuleGroup) SetMetricName(v string) *RuleGroup {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *RuleGroup) SetName(v string) *RuleGroup {
	s.Name = &v
	return s
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *RuleGroup) SetRuleGroupId(v string) *RuleGroup {
	s.RuleGroupId = &v
	return s
}

// Contains the identifier and the friendly name or description of the RuleGroup.
type RuleGroupSummary struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the RuleGroup. You can't change the name
	// of a RuleGroup after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for a RuleGroup. You use RuleGroupId to get more information
	// about a RuleGroup (see GetRuleGroup), update a RuleGroup (see UpdateRuleGroup),
	// insert a RuleGroup into a WebACL or delete one from a WebACL (see UpdateWebACL),
	// or delete a RuleGroup from AWS WAF (see DeleteRuleGroup).
	//
	// RuleGroupId is returned by CreateRuleGroup and by ListRuleGroups.
	//
	// RuleGroupId is a required field
	RuleGroupId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RuleGroupSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RuleGroupSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *RuleGroupSummary) SetName(v string) *RuleGroupSummary {
	s.Name = &v
	return s
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *RuleGroupSummary) SetRuleGroupId(v string) *RuleGroupSummary {
	s.RuleGroupId = &v
	return s
}

// Specifies an ActivatedRule and indicates whether you want to add it to a
// RuleGroup or delete it from a RuleGroup.
type RuleGroupUpdate struct {
	_ struct{} `type:"structure"`

	// Specify INSERT to add an ActivatedRule to a RuleGroup. Use DELETE to remove
	// an ActivatedRule from a RuleGroup.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// The ActivatedRule object specifies a Rule that you want to insert or delete,
	// the priority of the Rule in the WebACL, and the action that you want AWS
	// WAF to take when a web request matches the Rule (ALLOW, BLOCK, or COUNT).
	//
	// ActivatedRule is a required field
	ActivatedRule *ActivatedRule `type:"structure" required:"true"`
}

// String returns the string representation
func (s RuleGroupUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RuleGroupUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RuleGroupUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RuleGroupUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.ActivatedRule == nil {
		invalidParams.Add(request.NewErrParamRequired("ActivatedRule"))
	}
	if s.ActivatedRule != nil {
		if err := s.ActivatedRule.Validate(); err != nil {
			invalidParams.AddNested("ActivatedRule", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *RuleGroupUpdate) SetAction(v string) *RuleGroupUpdate {
	s.Action = &v
	return s
}

// SetActivatedRule sets the ActivatedRule field's value.
func (s *RuleGroupUpdate) SetActivatedRule(v *ActivatedRule) *RuleGroupUpdate {
	s.ActivatedRule = v
	return s
}

// Contains the identifier and the friendly name or description of the Rule.
type RuleSummary struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the Rule. You can't change the name of
	// a Rule after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for a Rule. You use RuleId to get more information about
	// a Rule (see GetRule), update a Rule (see UpdateRule), insert a Rule into
	// a WebACL or delete one from a WebACL (see UpdateWebACL), or delete a Rule
	// from AWS WAF (see DeleteRule).
	//
	// RuleId is returned by CreateRule and by ListRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s RuleSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RuleSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *RuleSummary) SetName(v string) *RuleSummary {
	s.Name = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *RuleSummary) SetRuleId(v string) *RuleSummary {
	s.RuleId = &v
	return s
}

// Specifies a Predicate (such as an IPSet) and indicates whether you want to
// add it to a Rule or delete it from a Rule.
type RuleUpdate struct {
	_ struct{} `type:"structure"`

	// Specify INSERT to add a Predicate to a Rule. Use DELETE to remove a Predicate
	// from a Rule.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// The ID of the Predicate (such as an IPSet) that you want to add to a Rule.
	//
	// Predicate is a required field
	Predicate *Predicate `type:"structure" required:"true"`
}

// String returns the string representation
func (s RuleUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RuleUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RuleUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RuleUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.Predicate == nil {
		invalidParams.Add(request.NewErrParamRequired("Predicate"))
	}
	if s.Predicate != nil {
		if err := s.Predicate.Validate(); err != nil {
			invalidParams.AddNested("Predicate", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *RuleUpdate) SetAction(v string) *RuleUpdate {
	s.Action = &v
	return s
}

// SetPredicate sets the Predicate field's value.
func (s *RuleUpdate) SetPredicate(v *Predicate) *RuleUpdate {
	s.Predicate = v
	return s
}

// The response from a GetSampledRequests request includes a SampledHTTPRequests
// complex type that appears as SampledRequests in the response syntax. SampledHTTPRequests
// contains one SampledHTTPRequest object for each web request that is returned
// by GetSampledRequests.
type SampledHTTPRequest struct {
	_ struct{} `type:"structure"`

	// The action for the Rule that the request matched: ALLOW, BLOCK, or COUNT.
	Action *string `type:"string"`

	// A complex type that contains detailed information about the request.
	//
	// Request is a required field
	Request *HTTPRequest `type:"structure" required:"true"`

	// This value is returned if the GetSampledRequests request specifies the ID
	// of a RuleGroup rather than the ID of an individual rule. RuleWithinRuleGroup
	// is the rule within the specified RuleGroup that matched the request listed
	// in the response.
	RuleWithinRuleGroup *string `min:"1" type:"string"`

	// The time at which AWS WAF received the request from your AWS resource, in
	// Unix time format (in seconds).
	Timestamp *time.Time `type:"timestamp"`

	// A value that indicates how one result in the response relates proportionally
	// to other results in the response. A result that has a weight of 2 represents
	// roughly twice as many CloudFront web requests as a result that has a weight
	// of 1.
	//
	// Weight is a required field
	Weight *int64 `type:"long" required:"true"`
}

// String returns the string representation
func (s SampledHTTPRequest) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SampledHTTPRequest) GoString() string {
	return s.String()
}

// SetAction sets the Action field's value.
func (s *SampledHTTPRequest) SetAction(v string) *SampledHTTPRequest {
	s.Action = &v
	return s
}

// SetRequest sets the Request field's value.
func (s *SampledHTTPRequest) SetRequest(v *HTTPRequest) *SampledHTTPRequest {
	s.Request = v
	return s
}

// SetRuleWithinRuleGroup sets the RuleWithinRuleGroup field's value.
func (s *SampledHTTPRequest) SetRuleWithinRuleGroup(v string) *SampledHTTPRequest {
	s.RuleWithinRuleGroup = &v
	return s
}

// SetTimestamp sets the Timestamp field's value.
func (s *SampledHTTPRequest) SetTimestamp(v time.Time) *SampledHTTPRequest {
	s.Timestamp = &v
	return s
}

// SetWeight sets the Weight field's value.
func (s *SampledHTTPRequest) SetWeight(v int64) *SampledHTTPRequest {
	s.Weight = &v
	return s
}

// Specifies a constraint on the size of a part of the web request. AWS WAF
// uses the Size, ComparisonOperator, and FieldToMatch to build an expression
// in the form of "SizeComparisonOperator size in bytes of FieldToMatch". If
// that expression is true, the SizeConstraint is considered to match.
type SizeConstraint struct {
	_ struct{} `type:"structure"`

	// The type of comparison you want AWS WAF to perform. AWS WAF uses this in
	// combination with the provided Size and FieldToMatch to build an expression
	// in the form of "SizeComparisonOperator size in bytes of FieldToMatch". If
	// that expression is true, the SizeConstraint is considered to match.
	//
	// EQ: Used to test if the Size is equal to the size of the FieldToMatch
	//
	// NE: Used to test if the Size is not equal to the size of the FieldToMatch
	//
	// LE: Used to test if the Size is less than or equal to the size of the FieldToMatch
	//
	// LT: Used to test if the Size is strictly less than the size of the FieldToMatch
	//
	// GE: Used to test if the Size is greater than or equal to the size of the
	// FieldToMatch
	//
	// GT: Used to test if the Size is strictly greater than the size of the FieldToMatch
	//
	// ComparisonOperator is a required field
	ComparisonOperator *string `type:"string" required:"true" enum:"ComparisonOperator"`

	// Specifies where in a web request to look for the size constraint.
	//
	// FieldToMatch is a required field
	FieldToMatch *FieldToMatch `type:"structure" required:"true"`

	// The size in bytes that you want AWS WAF to compare against the size of the
	// specified FieldToMatch. AWS WAF uses this in combination with ComparisonOperator
	// and FieldToMatch to build an expression in the form of "SizeComparisonOperator
	// size in bytes of FieldToMatch". If that expression is true, the SizeConstraint
	// is considered to match.
	//
	// Valid values for size are 0 - 21474836480 bytes (0 - 20 GB).
	//
	// If you specify URI for the value of Type, the / in the URI counts as one
	// character. For example, the URI /logo.jpg is nine characters long.
	//
	// Size is a required field
	Size *int64 `type:"long" required:"true"`

	// Text transformations eliminate some of the unusual formatting that attackers
	// use in web requests in an effort to bypass AWS WAF. If you specify a transformation,
	// AWS WAF performs the transformation on FieldToMatch before inspecting a request
	// for a match.
	//
	// You can only specify a single type of TextTransformation.
	//
	// Note that if you choose BODY for the value of Type, you must choose NONE
	// for TextTransformation because CloudFront forwards only the first 8192 bytes
	// for inspection.
	//
	// NONE
	//
	// Specify NONE if you don't want to perform any text transformations.
	//
	// CMD_LINE
	//
	// When you're concerned that attackers are injecting an operating system command
	// line command and using unusual formatting to disguise some or all of the
	// command, use this option to perform the following transformations:
	//
	//    * Delete the following characters: \ " ' ^
	//
	//    * Delete spaces before the following characters: / (
	//
	//    * Replace the following characters with a space: , ;
	//
	//    * Replace multiple spaces with one space
	//
	//    * Convert uppercase letters (A-Z) to lowercase (a-z)
	//
	// COMPRESS_WHITE_SPACE
	//
	// Use this option to replace the following characters with a space character
	// (decimal 32):
	//
	//    * \f, formfeed, decimal 12
	//
	//    * \t, tab, decimal 9
	//
	//    * \n, newline, decimal 10
	//
	//    * \r, carriage return, decimal 13
	//
	//    * \v, vertical tab, decimal 11
	//
	//    * non-breaking space, decimal 160
	//
	// COMPRESS_WHITE_SPACE also replaces multiple spaces with one space.
	//
	// HTML_ENTITY_DECODE
	//
	// Use this option to replace HTML-encoded characters with unencoded characters.
	// HTML_ENTITY_DECODE performs the following operations:
	//
	//    * Replaces (ampersand)quot; with "
	//
	//    * Replaces (ampersand)nbsp; with a non-breaking space, decimal 160
	//
	//    * Replaces (ampersand)lt; with a "less than" symbol
	//
	//    * Replaces (ampersand)gt; with >
	//
	//    * Replaces characters that are represented in hexadecimal format, (ampersand)#xhhhh;,
	//    with the corresponding characters
	//
	//    * Replaces characters that are represented in decimal format, (ampersand)#nnnn;,
	//    with the corresponding characters
	//
	// LOWERCASE
	//
	// Use this option to convert uppercase letters (A-Z) to lowercase (a-z).
	//
	// URL_DECODE
	//
	// Use this option to decode a URL-encoded value.
	//
	// TextTransformation is a required field
	TextTransformation *string `type:"string" required:"true" enum:"TextTransformation"`
}

// String returns the string representation
func (s SizeConstraint) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SizeConstraint) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SizeConstraint) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SizeConstraint"}
	if s.ComparisonOperator == nil {
		invalidParams.Add(request.NewErrParamRequired("ComparisonOperator"))
	}
	if s.FieldToMatch == nil {
		invalidParams.Add(request.NewErrParamRequired("FieldToMatch"))
	}
	if s.Size == nil {
		invalidParams.Add(request.NewErrParamRequired("Size"))
	}
	if s.TextTransformation == nil {
		invalidParams.Add(request.NewErrParamRequired("TextTransformation"))
	}
	if s.FieldToMatch != nil {
		if err := s.FieldToMatch.Validate(); err != nil {
			invalidParams.AddNested("FieldToMatch", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetComparisonOperator sets the ComparisonOperator field's value.
func (s *SizeConstraint) SetComparisonOperator(v string) *SizeConstraint {
	s.ComparisonOperator = &v
	return s
}

// SetFieldToMatch sets the FieldToMatch field's value.
func (s *SizeConstraint) SetFieldToMatch(v *FieldToMatch) *SizeConstraint {
	s.FieldToMatch = v
	return s
}

// SetSize sets the Size field's value.
func (s *SizeConstraint) SetSize(v int64) *SizeConstraint {
	s.Size = &v
	return s
}

// SetTextTransformation sets the TextTransformation field's value.
func (s *SizeConstraint) SetTextTransformation(v string) *SizeConstraint {
	s.TextTransformation = &v
	return s
}

// A complex type that contains SizeConstraint objects, which specify the parts
// of web requests that you want AWS WAF to inspect the size of. If a SizeConstraintSet
// contains more than one SizeConstraint object, a request only needs to match
// one constraint to be considered a match.
type SizeConstraintSet struct {
	_ struct{} `type:"structure"`

	// The name, if any, of the SizeConstraintSet.
	Name *string `min:"1" type:"string"`

	// A unique identifier for a SizeConstraintSet. You use SizeConstraintSetId
	// to get information about a SizeConstraintSet (see GetSizeConstraintSet),
	// update a SizeConstraintSet (see UpdateSizeConstraintSet), insert a SizeConstraintSet
	// into a Rule or delete one from a Rule (see UpdateRule), and delete a SizeConstraintSet
	// from AWS WAF (see DeleteSizeConstraintSet).
	//
	// SizeConstraintSetId is returned by CreateSizeConstraintSet and by ListSizeConstraintSets.
	//
	// SizeConstraintSetId is a required field
	SizeConstraintSetId *string `min:"1" type:"string" required:"true"`

	// Specifies the parts of web requests that you want to inspect the size of.
	//
	// SizeConstraints is a required field
	SizeConstraints []*SizeConstraint `type:"list" required:"true"`
}

// String returns the string representation
func (s SizeConstraintSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SizeConstraintSet) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *SizeConstraintSet) SetName(v string) *SizeConstraintSet {
	s.Name = &v
	return s
}

// SetSizeConstraintSetId sets the SizeConstraintSetId field's value.
func (s *SizeConstraintSet) SetSizeConstraintSetId(v string) *SizeConstraintSet {
	s.SizeConstraintSetId = &v
	return s
}

// SetSizeConstraints sets the SizeConstraints field's value.
func (s *SizeConstraintSet) SetSizeConstraints(v []*SizeConstraint) *SizeConstraintSet {
	s.SizeConstraints = v
	return s
}

// The Id and Name of a SizeConstraintSet.
type SizeConstraintSetSummary struct {
	_ struct{} `type:"structure"`

	// The name of the SizeConstraintSet, if any.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for a SizeConstraintSet. You use SizeConstraintSetId
	// to get information about a SizeConstraintSet (see GetSizeConstraintSet),
	// update a SizeConstraintSet (see UpdateSizeConstraintSet), insert a SizeConstraintSet
	// into a Rule or delete one from a Rule (see UpdateRule), and delete a SizeConstraintSet
	// from AWS WAF (see DeleteSizeConstraintSet).
	//
	// SizeConstraintSetId is returned by CreateSizeConstraintSet and by ListSizeConstraintSets.
	//
	// SizeConstraintSetId is a required field
	SizeConstraintSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s SizeConstraintSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SizeConstraintSetSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *SizeConstraintSetSummary) SetName(v string) *SizeConstraintSetSummary {
	s.Name = &v
	return s
}

// SetSizeConstraintSetId sets the SizeConstraintSetId field's value.
func (s *SizeConstraintSetSummary) SetSizeConstraintSetId(v string) *SizeConstraintSetSummary {
	s.SizeConstraintSetId = &v
	return s
}

// Specifies the part of a web request that you want to inspect the size of
// and indicates whether you want to add the specification to a SizeConstraintSet
// or delete it from a SizeConstraintSet.
type SizeConstraintSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specify INSERT to add a SizeConstraintSetUpdate to a SizeConstraintSet. Use
	// DELETE to remove a SizeConstraintSetUpdate from a SizeConstraintSet.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// Specifies a constraint on the size of a part of the web request. AWS WAF
	// uses the Size, ComparisonOperator, and FieldToMatch to build an expression
	// in the form of "SizeComparisonOperator size in bytes of FieldToMatch". If
	// that expression is true, the SizeConstraint is considered to match.
	//
	// SizeConstraint is a required field
	SizeConstraint *SizeConstraint `type:"structure" required:"true"`
}

// String returns the string representation
func (s SizeConstraintSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SizeConstraintSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SizeConstraintSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SizeConstraintSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.SizeConstraint == nil {
		invalidParams.Add(request.NewErrParamRequired("SizeConstraint"))
	}
	if s.SizeConstraint != nil {
		if err := s.SizeConstraint.Validate(); err != nil {
			invalidParams.AddNested("SizeConstraint", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *SizeConstraintSetUpdate) SetAction(v string) *SizeConstraintSetUpdate {
	s.Action = &v
	return s
}

// SetSizeConstraint sets the SizeConstraint field's value.
func (s *SizeConstraintSetUpdate) SetSizeConstraint(v *SizeConstraint) *SizeConstraintSetUpdate {
	s.SizeConstraint = v
	return s
}

// A complex type that contains SqlInjectionMatchTuple objects, which specify
// the parts of web requests that you want AWS WAF to inspect for snippets of
// malicious SQL code and, if you want AWS WAF to inspect a header, the name
// of the header. If a SqlInjectionMatchSet contains more than one SqlInjectionMatchTuple
// object, a request needs to include snippets of SQL code in only one of the
// specified parts of the request to be considered a match.
type SqlInjectionMatchSet struct {
	_ struct{} `type:"structure"`

	// The name, if any, of the SqlInjectionMatchSet.
	Name *string `min:"1" type:"string"`

	// A unique identifier for a SqlInjectionMatchSet. You use SqlInjectionMatchSetId
	// to get information about a SqlInjectionMatchSet (see GetSqlInjectionMatchSet),
	// update a SqlInjectionMatchSet (see UpdateSqlInjectionMatchSet), insert a
	// SqlInjectionMatchSet into a Rule or delete one from a Rule (see UpdateRule),
	// and delete a SqlInjectionMatchSet from AWS WAF (see DeleteSqlInjectionMatchSet).
	//
	// SqlInjectionMatchSetId is returned by CreateSqlInjectionMatchSet and by ListSqlInjectionMatchSets.
	//
	// SqlInjectionMatchSetId is a required field
	SqlInjectionMatchSetId *string `min:"1" type:"string" required:"true"`

	// Specifies the parts of web requests that you want to inspect for snippets
	// of malicious SQL code.
	//
	// SqlInjectionMatchTuples is a required field
	SqlInjectionMatchTuples []*SqlInjectionMatchTuple `type:"list" required:"true"`
}

// String returns the string representation
func (s SqlInjectionMatchSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SqlInjectionMatchSet) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *SqlInjectionMatchSet) SetName(v string) *SqlInjectionMatchSet {
	s.Name = &v
	return s
}

// SetSqlInjectionMatchSetId sets the SqlInjectionMatchSetId field's value.
func (s *SqlInjectionMatchSet) SetSqlInjectionMatchSetId(v string) *SqlInjectionMatchSet {
	s.SqlInjectionMatchSetId = &v
	return s
}

// SetSqlInjectionMatchTuples sets the SqlInjectionMatchTuples field's value.
func (s *SqlInjectionMatchSet) SetSqlInjectionMatchTuples(v []*SqlInjectionMatchTuple) *SqlInjectionMatchSet {
	s.SqlInjectionMatchTuples = v
	return s
}

// The Id and Name of a SqlInjectionMatchSet.
type SqlInjectionMatchSetSummary struct {
	_ struct{} `type:"structure"`

	// The name of the SqlInjectionMatchSet, if any, specified by Id.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for a SqlInjectionMatchSet. You use SqlInjectionMatchSetId
	// to get information about a SqlInjectionMatchSet (see GetSqlInjectionMatchSet),
	// update a SqlInjectionMatchSet (see UpdateSqlInjectionMatchSet), insert a
	// SqlInjectionMatchSet into a Rule or delete one from a Rule (see UpdateRule),
	// and delete a SqlInjectionMatchSet from AWS WAF (see DeleteSqlInjectionMatchSet).
	//
	// SqlInjectionMatchSetId is returned by CreateSqlInjectionMatchSet and by ListSqlInjectionMatchSets.
	//
	// SqlInjectionMatchSetId is a required field
	SqlInjectionMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s SqlInjectionMatchSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SqlInjectionMatchSetSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *SqlInjectionMatchSetSummary) SetName(v string) *SqlInjectionMatchSetSummary {
	s.Name = &v
	return s
}

// SetSqlInjectionMatchSetId sets the SqlInjectionMatchSetId field's value.
func (s *SqlInjectionMatchSetSummary) SetSqlInjectionMatchSetId(v string) *SqlInjectionMatchSetSummary {
	s.SqlInjectionMatchSetId = &v
	return s
}

// Specifies the part of a web request that you want to inspect for snippets
// of malicious SQL code and indicates whether you want to add the specification
// to a SqlInjectionMatchSet or delete it from a SqlInjectionMatchSet.
type SqlInjectionMatchSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specify INSERT to add a SqlInjectionMatchSetUpdate to a SqlInjectionMatchSet.
	// Use DELETE to remove a SqlInjectionMatchSetUpdate from a SqlInjectionMatchSet.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// Specifies the part of a web request that you want AWS WAF to inspect for
	// snippets of malicious SQL code and, if you want AWS WAF to inspect a header,
	// the name of the header.
	//
	// SqlInjectionMatchTuple is a required field
	SqlInjectionMatchTuple *SqlInjectionMatchTuple `type:"structure" required:"true"`
}

// String returns the string representation
func (s SqlInjectionMatchSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SqlInjectionMatchSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SqlInjectionMatchSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SqlInjectionMatchSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.SqlInjectionMatchTuple == nil {
		invalidParams.Add(request.NewErrParamRequired("SqlInjectionMatchTuple"))
	}
	if s.SqlInjectionMatchTuple != nil {
		if err := s.SqlInjectionMatchTuple.Validate(); err != nil {
			invalidParams.AddNested("SqlInjectionMatchTuple", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *SqlInjectionMatchSetUpdate) SetAction(v string) *SqlInjectionMatchSetUpdate {
	s.Action = &v
	return s
}

// SetSqlInjectionMatchTuple sets the SqlInjectionMatchTuple field's value.
func (s *SqlInjectionMatchSetUpdate) SetSqlInjectionMatchTuple(v *SqlInjectionMatchTuple) *SqlInjectionMatchSetUpdate {
	s.SqlInjectionMatchTuple = v
	return s
}

// Specifies the part of a web request that you want AWS WAF to inspect for
// snippets of malicious SQL code and, if you want AWS WAF to inspect a header,
// the name of the header.
type SqlInjectionMatchTuple struct {
	_ struct{} `type:"structure"`

	// Specifies where in a web request to look for snippets of malicious SQL code.
	//
	// FieldToMatch is a required field
	FieldToMatch *FieldToMatch `type:"structure" required:"true"`

	// Text transformations eliminate some of the unusual formatting that attackers
	// use in web requests in an effort to bypass AWS WAF. If you specify a transformation,
	// AWS WAF performs the transformation on FieldToMatch before inspecting a request
	// for a match.
	//
	// You can only specify a single type of TextTransformation.
	//
	// CMD_LINE
	//
	// When you're concerned that attackers are injecting an operating system command
	// line command and using unusual formatting to disguise some or all of the
	// command, use this option to perform the following transformations:
	//
	//    * Delete the following characters: \ " ' ^
	//
	//    * Delete spaces before the following characters: / (
	//
	//    * Replace the following characters with a space: , ;
	//
	//    * Replace multiple spaces with one space
	//
	//    * Convert uppercase letters (A-Z) to lowercase (a-z)
	//
	// COMPRESS_WHITE_SPACE
	//
	// Use this option to replace the following characters with a space character
	// (decimal 32):
	//
	//    * \f, formfeed, decimal 12
	//
	//    * \t, tab, decimal 9
	//
	//    * \n, newline, decimal 10
	//
	//    * \r, carriage return, decimal 13
	//
	//    * \v, vertical tab, decimal 11
	//
	//    * non-breaking space, decimal 160
	//
	// COMPRESS_WHITE_SPACE also replaces multiple spaces with one space.
	//
	// HTML_ENTITY_DECODE
	//
	// Use this option to replace HTML-encoded characters with unencoded characters.
	// HTML_ENTITY_DECODE performs the following operations:
	//
	//    * Replaces (ampersand)quot; with "
	//
	//    * Replaces (ampersand)nbsp; with a non-breaking space, decimal 160
	//
	//    * Replaces (ampersand)lt; with a "less than" symbol
	//
	//    * Replaces (ampersand)gt; with >
	//
	//    * Replaces characters that are represented in hexadecimal format, (ampersand)#xhhhh;,
	//    with the corresponding characters
	//
	//    * Replaces characters that are represented in decimal format, (ampersand)#nnnn;,
	//    with the corresponding characters
	//
	// LOWERCASE
	//
	// Use this option to convert uppercase letters (A-Z) to lowercase (a-z).
	//
	// URL_DECODE
	//
	// Use this option to decode a URL-encoded value.
	//
	// NONE
	//
	// Specify NONE if you don't want to perform any text transformations.
	//
	// TextTransformation is a required field
	TextTransformation *string `type:"string" required:"true" enum:"TextTransformation"`
}

// String returns the string representation
func (s SqlInjectionMatchTuple) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SqlInjectionMatchTuple) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SqlInjectionMatchTuple) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SqlInjectionMatchTuple"}
	if s.FieldToMatch == nil {
		invalidParams.Add(request.NewErrParamRequired("FieldToMatch"))
	}
	if s.TextTransformation == nil {
		invalidParams.Add(request.NewErrParamRequired("TextTransformation"))
	}
	if s.FieldToMatch != nil {
		if err := s.FieldToMatch.Validate(); err != nil {
			invalidParams.AddNested("FieldToMatch", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFieldToMatch sets the FieldToMatch field's value.
func (s *SqlInjectionMatchTuple) SetFieldToMatch(v *FieldToMatch) *SqlInjectionMatchTuple {
	s.FieldToMatch = v
	return s
}

// SetTextTransformation sets the TextTransformation field's value.
func (s *SqlInjectionMatchTuple) SetTextTransformation(v string) *SqlInjectionMatchTuple {
	s.TextTransformation = &v
	return s
}

// A summary of the rule groups you are subscribed to.
type SubscribedRuleGroupSummary struct {
	_ struct{} `type:"structure"`

	// A friendly name or description for the metrics for this RuleGroup. The name
	// can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain whitespace. You can't change the name of the metric after you create
	// the RuleGroup.
	//
	// MetricName is a required field
	MetricName *string `type:"string" required:"true"`

	// A friendly name or description of the RuleGroup. You can't change the name
	// of a RuleGroup after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for a RuleGroup.
	//
	// RuleGroupId is a required field
	RuleGroupId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s SubscribedRuleGroupSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SubscribedRuleGroupSummary) GoString() string {
	return s.String()
}

// SetMetricName sets the MetricName field's value.
func (s *SubscribedRuleGroupSummary) SetMetricName(v string) *SubscribedRuleGroupSummary {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *SubscribedRuleGroupSummary) SetName(v string) *SubscribedRuleGroupSummary {
	s.Name = &v
	return s
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *SubscribedRuleGroupSummary) SetRuleGroupId(v string) *SubscribedRuleGroupSummary {
	s.RuleGroupId = &v
	return s
}

// In a GetSampledRequests request, the StartTime and EndTime objects specify
// the time range for which you want AWS WAF to return a sample of web requests.
//
// In a GetSampledRequests response, the StartTime and EndTime objects specify
// the time range for which AWS WAF actually returned a sample of web requests.
// AWS WAF gets the specified number of requests from among the first 5,000
// requests that your AWS resource receives during the specified time period.
// If your resource receives more than 5,000 requests during that period, AWS
// WAF stops sampling after the 5,000th request. In that case, EndTime is the
// time that AWS WAF received the 5,000th request.
type TimeWindow struct {
	_ struct{} `type:"structure"`

	// The end of the time range from which you want GetSampledRequests to return
	// a sample of the requests that your AWS resource received. Specify the date
	// and time in the following format: "2016-09-27T14:50Z". You can specify any
	// time range in the previous three hours.
	//
	// EndTime is a required field
	EndTime *time.Time `type:"timestamp" required:"true"`

	// The beginning of the time range from which you want GetSampledRequests to
	// return a sample of the requests that your AWS resource received. Specify
	// the date and time in the following format: "2016-09-27T14:50Z". You can specify
	// any time range in the previous three hours.
	//
	// StartTime is a required field
	StartTime *time.Time `type:"timestamp" required:"true"`
}

// String returns the string representation
func (s TimeWindow) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s TimeWindow) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TimeWindow) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TimeWindow"}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndTime sets the EndTime field's value.
func (s *TimeWindow) SetEndTime(v time.Time) *TimeWindow {
	s.EndTime = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *TimeWindow) SetStartTime(v time.Time) *TimeWindow {
	s.StartTime = &v
	return s
}

type UpdateByteMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The ByteMatchSetId of the ByteMatchSet that you want to update. ByteMatchSetId
	// is returned by CreateByteMatchSet and by ListByteMatchSets.
	//
	// ByteMatchSetId is a required field
	ByteMatchSetId *string `min:"1" type:"string" required:"true"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// An array of ByteMatchSetUpdate objects that you want to insert into or delete
	// from a ByteMatchSet. For more information, see the applicable data types:
	//
	//    * ByteMatchSetUpdate: Contains Action and ByteMatchTuple
	//
	//    * ByteMatchTuple: Contains FieldToMatch, PositionalConstraint, TargetString,
	//    and TextTransformation
	//
	//    * FieldToMatch: Contains Data and Type
	//
	// Updates is a required field
	Updates []*ByteMatchSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateByteMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateByteMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateByteMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateByteMatchSetInput"}
	if s.ByteMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("ByteMatchSetId"))
	}
	if s.ByteMatchSetId != nil && len(*s.ByteMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ByteMatchSetId", 1))
	}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetByteMatchSetId sets the ByteMatchSetId field's value.
func (s *UpdateByteMatchSetInput) SetByteMatchSetId(v string) *UpdateByteMatchSetInput {
	s.ByteMatchSetId = &v
	return s
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateByteMatchSetInput) SetChangeToken(v string) *UpdateByteMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateByteMatchSetInput) SetUpdates(v []*ByteMatchSetUpdate) *UpdateByteMatchSetInput {
	s.Updates = v
	return s
}

type UpdateByteMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateByteMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateByteMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateByteMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateByteMatchSetOutput) SetChangeToken(v string) *UpdateByteMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type UpdateGeoMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The GeoMatchSetId of the GeoMatchSet that you want to update. GeoMatchSetId
	// is returned by CreateGeoMatchSet and by ListGeoMatchSets.
	//
	// GeoMatchSetId is a required field
	GeoMatchSetId *string `min:"1" type:"string" required:"true"`

	// An array of GeoMatchSetUpdate objects that you want to insert into or delete
	// from an GeoMatchSet. For more information, see the applicable data types:
	//
	//    * GeoMatchSetUpdate: Contains Action and GeoMatchConstraint
	//
	//    * GeoMatchConstraint: Contains Type and Value
	//
	// You can have only one Type and Value per GeoMatchConstraint. To add multiple
	//    countries, include multiple GeoMatchSetUpdate objects in your request.
	//
	// Updates is a required field
	Updates []*GeoMatchSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateGeoMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateGeoMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateGeoMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateGeoMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.GeoMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("GeoMatchSetId"))
	}
	if s.GeoMatchSetId != nil && len(*s.GeoMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GeoMatchSetId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateGeoMatchSetInput) SetChangeToken(v string) *UpdateGeoMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetGeoMatchSetId sets the GeoMatchSetId field's value.
func (s *UpdateGeoMatchSetInput) SetGeoMatchSetId(v string) *UpdateGeoMatchSetInput {
	s.GeoMatchSetId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateGeoMatchSetInput) SetUpdates(v []*GeoMatchSetUpdate) *UpdateGeoMatchSetInput {
	s.Updates = v
	return s
}

type UpdateGeoMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateGeoMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateGeoMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateGeoMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateGeoMatchSetOutput) SetChangeToken(v string) *UpdateGeoMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type UpdateIPSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The IPSetId of the IPSet that you want to update. IPSetId is returned by
	// CreateIPSet and by ListIPSets.
	//
	// IPSetId is a required field
	IPSetId *string `min:"1" type:"string" required:"true"`

	// An array of IPSetUpdate objects that you want to insert into or delete from
	// an IPSet. For more information, see the applicable data types:
	//
	//    * IPSetUpdate: Contains Action and IPSetDescriptor
	//
	//    * IPSetDescriptor: Contains Type and Value
	//
	// You can insert a maximum of 1000 addresses in a single request.
	//
	// Updates is a required field
	Updates []*IPSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateIPSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateIPSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateIPSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateIPSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.IPSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("IPSetId"))
	}
	if s.IPSetId != nil && len(*s.IPSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IPSetId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateIPSetInput) SetChangeToken(v string) *UpdateIPSetInput {
	s.ChangeToken = &v
	return s
}

// SetIPSetId sets the IPSetId field's value.
func (s *UpdateIPSetInput) SetIPSetId(v string) *UpdateIPSetInput {
	s.IPSetId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateIPSetInput) SetUpdates(v []*IPSetUpdate) *UpdateIPSetInput {
	s.Updates = v
	return s
}

type UpdateIPSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateIPSet request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateIPSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateIPSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateIPSetOutput) SetChangeToken(v string) *UpdateIPSetOutput {
	s.ChangeToken = &v
	return s
}

type UpdateRateBasedRuleInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The maximum number of requests, which have an identical value in the field
	// specified by the RateKey, allowed in a five-minute period. If the number
	// of requests exceeds the RateLimit and the other predicates specified in the
	// rule are also met, AWS WAF triggers the action that is specified for this
	// rule.
	//
	// RateLimit is a required field
	RateLimit *int64 `min:"2000" type:"long" required:"true"`

	// The RuleId of the RateBasedRule that you want to update. RuleId is returned
	// by CreateRateBasedRule and by ListRateBasedRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`

	// An array of RuleUpdate objects that you want to insert into or delete from
	// a RateBasedRule.
	//
	// Updates is a required field
	Updates []*RuleUpdate `type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateRateBasedRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRateBasedRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRateBasedRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRateBasedRuleInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RateLimit == nil {
		invalidParams.Add(request.NewErrParamRequired("RateLimit"))
	}
	if s.RateLimit != nil && *s.RateLimit < 2000 {
		invalidParams.Add(request.NewErrParamMinValue("RateLimit", 2000))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRateBasedRuleInput) SetChangeToken(v string) *UpdateRateBasedRuleInput {
	s.ChangeToken = &v
	return s
}

// SetRateLimit sets the RateLimit field's value.
func (s *UpdateRateBasedRuleInput) SetRateLimit(v int64) *UpdateRateBasedRuleInput {
	s.RateLimit = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *UpdateRateBasedRuleInput) SetRuleId(v string) *UpdateRateBasedRuleInput {
	s.RuleId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateRateBasedRuleInput) SetUpdates(v []*RuleUpdate) *UpdateRateBasedRuleInput {
	s.Updates = v
	return s
}

type UpdateRateBasedRuleOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateRateBasedRule request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateRateBasedRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRateBasedRuleOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRateBasedRuleOutput) SetChangeToken(v string) *UpdateRateBasedRuleOutput {
	s.ChangeToken = &v
	return s
}

type UpdateRegexMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RegexMatchSetId of the RegexMatchSet that you want to update. RegexMatchSetId
	// is returned by CreateRegexMatchSet and by ListRegexMatchSets.
	//
	// RegexMatchSetId is a required field
	RegexMatchSetId *string `min:"1" type:"string" required:"true"`

	// An array of RegexMatchSetUpdate objects that you want to insert into or delete
	// from a RegexMatchSet. For more information, see RegexMatchTuple.
	//
	// Updates is a required field
	Updates []*RegexMatchSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateRegexMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRegexMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRegexMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRegexMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RegexMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexMatchSetId"))
	}
	if s.RegexMatchSetId != nil && len(*s.RegexMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexMatchSetId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRegexMatchSetInput) SetChangeToken(v string) *UpdateRegexMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetRegexMatchSetId sets the RegexMatchSetId field's value.
func (s *UpdateRegexMatchSetInput) SetRegexMatchSetId(v string) *UpdateRegexMatchSetInput {
	s.RegexMatchSetId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateRegexMatchSetInput) SetUpdates(v []*RegexMatchSetUpdate) *UpdateRegexMatchSetInput {
	s.Updates = v
	return s
}

type UpdateRegexMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateRegexMatchSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateRegexMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRegexMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRegexMatchSetOutput) SetChangeToken(v string) *UpdateRegexMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type UpdateRegexPatternSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RegexPatternSetId of the RegexPatternSet that you want to update. RegexPatternSetId
	// is returned by CreateRegexPatternSet and by ListRegexPatternSets.
	//
	// RegexPatternSetId is a required field
	RegexPatternSetId *string `min:"1" type:"string" required:"true"`

	// An array of RegexPatternSetUpdate objects that you want to insert into or
	// delete from a RegexPatternSet.
	//
	// Updates is a required field
	Updates []*RegexPatternSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateRegexPatternSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRegexPatternSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRegexPatternSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRegexPatternSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RegexPatternSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("RegexPatternSetId"))
	}
	if s.RegexPatternSetId != nil && len(*s.RegexPatternSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RegexPatternSetId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRegexPatternSetInput) SetChangeToken(v string) *UpdateRegexPatternSetInput {
	s.ChangeToken = &v
	return s
}

// SetRegexPatternSetId sets the RegexPatternSetId field's value.
func (s *UpdateRegexPatternSetInput) SetRegexPatternSetId(v string) *UpdateRegexPatternSetInput {
	s.RegexPatternSetId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateRegexPatternSetInput) SetUpdates(v []*RegexPatternSetUpdate) *UpdateRegexPatternSetInput {
	s.Updates = v
	return s
}

type UpdateRegexPatternSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateRegexPatternSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateRegexPatternSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRegexPatternSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRegexPatternSetOutput) SetChangeToken(v string) *UpdateRegexPatternSetOutput {
	s.ChangeToken = &v
	return s
}

type UpdateRuleGroupInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RuleGroupId of the RuleGroup that you want to update. RuleGroupId is
	// returned by CreateRuleGroup and by ListRuleGroups.
	//
	// RuleGroupId is a required field
	RuleGroupId *string `min:"1" type:"string" required:"true"`

	// An array of RuleGroupUpdate objects that you want to insert into or delete
	// from a RuleGroup.
	//
	// You can only insert REGULAR rules into a rule group.
	//
	// ActivatedRule|OverrideAction applies only when updating or adding a RuleGroup
	// to a WebACL. In this case you do not use ActivatedRule|Action. For all other
	// update requests, ActivatedRule|Action is used instead of ActivatedRule|OverrideAction.
	//
	// Updates is a required field
	Updates []*RuleGroupUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateRuleGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRuleGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRuleGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRuleGroupInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RuleGroupId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleGroupId"))
	}
	if s.RuleGroupId != nil && len(*s.RuleGroupId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleGroupId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRuleGroupInput) SetChangeToken(v string) *UpdateRuleGroupInput {
	s.ChangeToken = &v
	return s
}

// SetRuleGroupId sets the RuleGroupId field's value.
func (s *UpdateRuleGroupInput) SetRuleGroupId(v string) *UpdateRuleGroupInput {
	s.RuleGroupId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateRuleGroupInput) SetUpdates(v []*RuleGroupUpdate) *UpdateRuleGroupInput {
	s.Updates = v
	return s
}

type UpdateRuleGroupOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateRuleGroup request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateRuleGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRuleGroupOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRuleGroupOutput) SetChangeToken(v string) *UpdateRuleGroupOutput {
	s.ChangeToken = &v
	return s
}

type UpdateRuleInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The RuleId of the Rule that you want to update. RuleId is returned by CreateRule
	// and by ListRules.
	//
	// RuleId is a required field
	RuleId *string `min:"1" type:"string" required:"true"`

	// An array of RuleUpdate objects that you want to insert into or delete from
	// a Rule. For more information, see the applicable data types:
	//
	//    * RuleUpdate: Contains Action and Predicate
	//
	//    * Predicate: Contains DataId, Negated, and Type
	//
	//    * FieldToMatch: Contains Data and Type
	//
	// Updates is a required field
	Updates []*RuleUpdate `type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRuleInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.RuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleId"))
	}
	if s.RuleId != nil && len(*s.RuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRuleInput) SetChangeToken(v string) *UpdateRuleInput {
	s.ChangeToken = &v
	return s
}

// SetRuleId sets the RuleId field's value.
func (s *UpdateRuleInput) SetRuleId(v string) *UpdateRuleInput {
	s.RuleId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateRuleInput) SetUpdates(v []*RuleUpdate) *UpdateRuleInput {
	s.Updates = v
	return s
}

type UpdateRuleOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateRule request. You can also
	// use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRuleOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateRuleOutput) SetChangeToken(v string) *UpdateRuleOutput {
	s.ChangeToken = &v
	return s
}

type UpdateSizeConstraintSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The SizeConstraintSetId of the SizeConstraintSet that you want to update.
	// SizeConstraintSetId is returned by CreateSizeConstraintSet and by ListSizeConstraintSets.
	//
	// SizeConstraintSetId is a required field
	SizeConstraintSetId *string `min:"1" type:"string" required:"true"`

	// An array of SizeConstraintSetUpdate objects that you want to insert into
	// or delete from a SizeConstraintSet. For more information, see the applicable
	// data types:
	//
	//    * SizeConstraintSetUpdate: Contains Action and SizeConstraint
	//
	//    * SizeConstraint: Contains FieldToMatch, TextTransformation, ComparisonOperator,
	//    and Size
	//
	//    * FieldToMatch: Contains Data and Type
	//
	// Updates is a required field
	Updates []*SizeConstraintSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateSizeConstraintSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateSizeConstraintSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateSizeConstraintSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateSizeConstraintSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.SizeConstraintSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("SizeConstraintSetId"))
	}
	if s.SizeConstraintSetId != nil && len(*s.SizeConstraintSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SizeConstraintSetId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateSizeConstraintSetInput) SetChangeToken(v string) *UpdateSizeConstraintSetInput {
	s.ChangeToken = &v
	return s
}

// SetSizeConstraintSetId sets the SizeConstraintSetId field's value.
func (s *UpdateSizeConstraintSetInput) SetSizeConstraintSetId(v string) *UpdateSizeConstraintSetInput {
	s.SizeConstraintSetId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateSizeConstraintSetInput) SetUpdates(v []*SizeConstraintSetUpdate) *UpdateSizeConstraintSetInput {
	s.Updates = v
	return s
}

type UpdateSizeConstraintSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateSizeConstraintSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateSizeConstraintSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateSizeConstraintSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateSizeConstraintSetOutput) SetChangeToken(v string) *UpdateSizeConstraintSetOutput {
	s.ChangeToken = &v
	return s
}

// A request to update a SqlInjectionMatchSet.
type UpdateSqlInjectionMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// The SqlInjectionMatchSetId of the SqlInjectionMatchSet that you want to update.
	// SqlInjectionMatchSetId is returned by CreateSqlInjectionMatchSet and by ListSqlInjectionMatchSets.
	//
	// SqlInjectionMatchSetId is a required field
	SqlInjectionMatchSetId *string `min:"1" type:"string" required:"true"`

	// An array of SqlInjectionMatchSetUpdate objects that you want to insert into
	// or delete from a SqlInjectionMatchSet. For more information, see the applicable
	// data types:
	//
	//    * SqlInjectionMatchSetUpdate: Contains Action and SqlInjectionMatchTuple
	//
	//    * SqlInjectionMatchTuple: Contains FieldToMatch and TextTransformation
	//
	//    * FieldToMatch: Contains Data and Type
	//
	// Updates is a required field
	Updates []*SqlInjectionMatchSetUpdate `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s UpdateSqlInjectionMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateSqlInjectionMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateSqlInjectionMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateSqlInjectionMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.SqlInjectionMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("SqlInjectionMatchSetId"))
	}
	if s.SqlInjectionMatchSetId != nil && len(*s.SqlInjectionMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SqlInjectionMatchSetId", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateSqlInjectionMatchSetInput) SetChangeToken(v string) *UpdateSqlInjectionMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetSqlInjectionMatchSetId sets the SqlInjectionMatchSetId field's value.
func (s *UpdateSqlInjectionMatchSetInput) SetSqlInjectionMatchSetId(v string) *UpdateSqlInjectionMatchSetInput {
	s.SqlInjectionMatchSetId = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateSqlInjectionMatchSetInput) SetUpdates(v []*SqlInjectionMatchSetUpdate) *UpdateSqlInjectionMatchSetInput {
	s.Updates = v
	return s
}

// The response to an UpdateSqlInjectionMatchSets request.
type UpdateSqlInjectionMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateSqlInjectionMatchSet request.
	// You can also use this value to query the status of the request. For more
	// information, see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateSqlInjectionMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateSqlInjectionMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateSqlInjectionMatchSetOutput) SetChangeToken(v string) *UpdateSqlInjectionMatchSetOutput {
	s.ChangeToken = &v
	return s
}

type UpdateWebACLInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// A default action for the web ACL, either ALLOW or BLOCK. AWS WAF performs
	// the default action if a request doesn't match the criteria in any of the
	// rules in a web ACL.
	DefaultAction *WafAction `type:"structure"`

	// An array of updates to make to the WebACL.
	//
	// An array of WebACLUpdate objects that you want to insert into or delete from
	// a WebACL. For more information, see the applicable data types:
	//
	//    * WebACLUpdate: Contains Action and ActivatedRule
	//
	//    * ActivatedRule: Contains Action, OverrideAction, Priority, RuleId, and
	//    Type. ActivatedRule|OverrideAction applies only when updating or adding
	//    a RuleGroup to a WebACL. In this case, you do not use ActivatedRule|Action.
	//    For all other update requests, ActivatedRule|Action is used instead of
	//    ActivatedRule|OverrideAction.
	//
	//    * WafAction: Contains Type
	Updates []*WebACLUpdate `type:"list"`

	// The WebACLId of the WebACL that you want to update. WebACLId is returned
	// by CreateWebACL and by ListWebACLs.
	//
	// WebACLId is a required field
	WebACLId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s UpdateWebACLInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateWebACLInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateWebACLInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateWebACLInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.WebACLId == nil {
		invalidParams.Add(request.NewErrParamRequired("WebACLId"))
	}
	if s.WebACLId != nil && len(*s.WebACLId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("WebACLId", 1))
	}
	if s.DefaultAction != nil {
		if err := s.DefaultAction.Validate(); err != nil {
			invalidParams.AddNested("DefaultAction", err.(request.ErrInvalidParams))
		}
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateWebACLInput) SetChangeToken(v string) *UpdateWebACLInput {
	s.ChangeToken = &v
	return s
}

// SetDefaultAction sets the DefaultAction field's value.
func (s *UpdateWebACLInput) SetDefaultAction(v *WafAction) *UpdateWebACLInput {
	s.DefaultAction = v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateWebACLInput) SetUpdates(v []*WebACLUpdate) *UpdateWebACLInput {
	s.Updates = v
	return s
}

// SetWebACLId sets the WebACLId field's value.
func (s *UpdateWebACLInput) SetWebACLId(v string) *UpdateWebACLInput {
	s.WebACLId = &v
	return s
}

type UpdateWebACLOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateWebACL request. You can
	// also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateWebACLOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateWebACLOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateWebACLOutput) SetChangeToken(v string) *UpdateWebACLOutput {
	s.ChangeToken = &v
	return s
}

// A request to update an XssMatchSet.
type UpdateXssMatchSetInput struct {
	_ struct{} `type:"structure"`

	// The value returned by the most recent call to GetChangeToken.
	//
	// ChangeToken is a required field
	ChangeToken *string `min:"1" type:"string" required:"true"`

	// An array of XssMatchSetUpdate objects that you want to insert into or delete
	// from an XssMatchSet. For more information, see the applicable data types:
	//
	//    * XssMatchSetUpdate: Contains Action and XssMatchTuple
	//
	//    * XssMatchTuple: Contains FieldToMatch and TextTransformation
	//
	//    * FieldToMatch: Contains Data and Type
	//
	// Updates is a required field
	Updates []*XssMatchSetUpdate `min:"1" type:"list" required:"true"`

	// The XssMatchSetId of the XssMatchSet that you want to update. XssMatchSetId
	// is returned by CreateXssMatchSet and by ListXssMatchSets.
	//
	// XssMatchSetId is a required field
	XssMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s UpdateXssMatchSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateXssMatchSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateXssMatchSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateXssMatchSetInput"}
	if s.ChangeToken == nil {
		invalidParams.Add(request.NewErrParamRequired("ChangeToken"))
	}
	if s.ChangeToken != nil && len(*s.ChangeToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeToken", 1))
	}
	if s.Updates == nil {
		invalidParams.Add(request.NewErrParamRequired("Updates"))
	}
	if s.Updates != nil && len(s.Updates) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Updates", 1))
	}
	if s.XssMatchSetId == nil {
		invalidParams.Add(request.NewErrParamRequired("XssMatchSetId"))
	}
	if s.XssMatchSetId != nil && len(*s.XssMatchSetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("XssMatchSetId", 1))
	}
	if s.Updates != nil {
		for i, v := range s.Updates {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Updates", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateXssMatchSetInput) SetChangeToken(v string) *UpdateXssMatchSetInput {
	s.ChangeToken = &v
	return s
}

// SetUpdates sets the Updates field's value.
func (s *UpdateXssMatchSetInput) SetUpdates(v []*XssMatchSetUpdate) *UpdateXssMatchSetInput {
	s.Updates = v
	return s
}

// SetXssMatchSetId sets the XssMatchSetId field's value.
func (s *UpdateXssMatchSetInput) SetXssMatchSetId(v string) *UpdateXssMatchSetInput {
	s.XssMatchSetId = &v
	return s
}

// The response to an UpdateXssMatchSets request.
type UpdateXssMatchSetOutput struct {
	_ struct{} `type:"structure"`

	// The ChangeToken that you used to submit the UpdateXssMatchSet request. You
	// can also use this value to query the status of the request. For more information,
	// see GetChangeTokenStatus.
	ChangeToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s UpdateXssMatchSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateXssMatchSetOutput) GoString() string {
	return s.String()
}

// SetChangeToken sets the ChangeToken field's value.
func (s *UpdateXssMatchSetOutput) SetChangeToken(v string) *UpdateXssMatchSetOutput {
	s.ChangeToken = &v
	return s
}

// For the action that is associated with a rule in a WebACL, specifies the
// action that you want AWS WAF to perform when a web request matches all of
// the conditions in a rule. For the default action in a WebACL, specifies the
// action that you want AWS WAF to take when a web request doesn't match all
// of the conditions in any of the rules in a WebACL.
type WafAction struct {
	_ struct{} `type:"structure"`

	// Specifies how you want AWS WAF to respond to requests that match the settings
	// in a Rule. Valid settings include the following:
	//
	//    * ALLOW: AWS WAF allows requests
	//
	//    * BLOCK: AWS WAF blocks requests
	//
	//    * COUNT: AWS WAF increments a counter of the requests that match all of
	//    the conditions in the rule. AWS WAF then continues to inspect the web
	//    request based on the remaining rules in the web ACL. You can't specify
	//    COUNT for the default action for a WebACL.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"WafActionType"`
}

// String returns the string representation
func (s WafAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WafAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *WafAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "WafAction"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *WafAction) SetType(v string) *WafAction {
	s.Type = &v
	return s
}

// The action to take if any rule within the RuleGroup matches a request.
type WafOverrideAction struct {
	_ struct{} `type:"structure"`

	// COUNT overrides the action specified by the individual rule within a RuleGroup
	// . If set to NONE, the rule's action will take place.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"WafOverrideActionType"`
}

// String returns the string representation
func (s WafOverrideAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WafOverrideAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *WafOverrideAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "WafOverrideAction"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *WafOverrideAction) SetType(v string) *WafOverrideAction {
	s.Type = &v
	return s
}

// Contains the Rules that identify the requests that you want to allow, block,
// or count. In a WebACL, you also specify a default action (ALLOW or BLOCK),
// and the action for each Rule that you add to a WebACL, for example, block
// requests from specified IP addresses or block requests from specified referrers.
// You also associate the WebACL with a CloudFront distribution to identify
// the requests that you want AWS WAF to filter. If you add more than one Rule
// to a WebACL, a request needs to match only one of the specifications to be
// allowed, blocked, or counted. For more information, see UpdateWebACL.
type WebACL struct {
	_ struct{} `type:"structure"`

	// The action to perform if none of the Rules contained in the WebACL match.
	// The action is specified by the WafAction object.
	//
	// DefaultAction is a required field
	DefaultAction *WafAction `type:"structure" required:"true"`

	// A friendly name or description for the metrics for this WebACL. The name
	// can contain only alphanumeric characters (A-Z, a-z, 0-9); the name can't
	// contain whitespace. You can't change MetricName after you create the WebACL.
	MetricName *string `type:"string"`

	// A friendly name or description of the WebACL. You can't change the name of
	// a WebACL after you create it.
	Name *string `min:"1" type:"string"`

	// An array that contains the action for each Rule in a WebACL, the priority
	// of the Rule, and the ID of the Rule.
	//
	// Rules is a required field
	Rules []*ActivatedRule `type:"list" required:"true"`

	// Tha Amazon Resource Name (ARN) of the web ACL.
	WebACLArn *string `min:"1" type:"string"`

	// A unique identifier for a WebACL. You use WebACLId to get information about
	// a WebACL (see GetWebACL), update a WebACL (see UpdateWebACL), and delete
	// a WebACL from AWS WAF (see DeleteWebACL).
	//
	// WebACLId is returned by CreateWebACL and by ListWebACLs.
	//
	// WebACLId is a required field
	WebACLId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s WebACL) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WebACL) GoString() string {
	return s.String()
}

// SetDefaultAction sets the DefaultAction field's value.
func (s *WebACL) SetDefaultAction(v *WafAction) *WebACL {
	s.DefaultAction = v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *WebACL) SetMetricName(v string) *WebACL {
	s.MetricName = &v
	return s
}

// SetName sets the Name field's value.
func (s *WebACL) SetName(v string) *WebACL {
	s.Name = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *WebACL) SetRules(v []*ActivatedRule) *WebACL {
	s.Rules = v
	return s
}

// SetWebACLArn sets the WebACLArn field's value.
func (s *WebACL) SetWebACLArn(v string) *WebACL {
	s.WebACLArn = &v
	return s
}

// SetWebACLId sets the WebACLId field's value.
func (s *WebACL) SetWebACLId(v string) *WebACL {
	s.WebACLId = &v
	return s
}

// Contains the identifier and the name or description of the WebACL.
type WebACLSummary struct {
	_ struct{} `type:"structure"`

	// A friendly name or description of the WebACL. You can't change the name of
	// a WebACL after you create it.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for a WebACL. You use WebACLId to get information about
	// a WebACL (see GetWebACL), update a WebACL (see UpdateWebACL), and delete
	// a WebACL from AWS WAF (see DeleteWebACL).
	//
	// WebACLId is returned by CreateWebACL and by ListWebACLs.
	//
	// WebACLId is a required field
	WebACLId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s WebACLSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WebACLSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *WebACLSummary) SetName(v string) *WebACLSummary {
	s.Name = &v
	return s
}

// SetWebACLId sets the WebACLId field's value.
func (s *WebACLSummary) SetWebACLId(v string) *WebACLSummary {
	s.WebACLId = &v
	return s
}

// Specifies whether to insert a Rule into or delete a Rule from a WebACL.
type WebACLUpdate struct {
	_ struct{} `type:"structure"`

	// Specifies whether to insert a Rule into or delete a Rule from a WebACL.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// The ActivatedRule object in an UpdateWebACL request specifies a Rule that
	// you want to insert or delete, the priority of the Rule in the WebACL, and
	// the action that you want AWS WAF to take when a web request matches the Rule
	// (ALLOW, BLOCK, or COUNT).
	//
	// ActivatedRule is a required field
	ActivatedRule *ActivatedRule `type:"structure" required:"true"`
}

// String returns the string representation
func (s WebACLUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WebACLUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *WebACLUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "WebACLUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.ActivatedRule == nil {
		invalidParams.Add(request.NewErrParamRequired("ActivatedRule"))
	}
	if s.ActivatedRule != nil {
		if err := s.ActivatedRule.Validate(); err != nil {
			invalidParams.AddNested("ActivatedRule", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *WebACLUpdate) SetAction(v string) *WebACLUpdate {
	s.Action = &v
	return s
}

// SetActivatedRule sets the ActivatedRule field's value.
func (s *WebACLUpdate) SetActivatedRule(v *ActivatedRule) *WebACLUpdate {
	s.ActivatedRule = v
	return s
}

// A complex type that contains XssMatchTuple objects, which specify the parts
// of web requests that you want AWS WAF to inspect for cross-site scripting
// attacks and, if you want AWS WAF to inspect a header, the name of the header.
// If a XssMatchSet contains more than one XssMatchTuple object, a request needs
// to include cross-site scripting attacks in only one of the specified parts
// of the request to be considered a match.
type XssMatchSet struct {
	_ struct{} `type:"structure"`

	// The name, if any, of the XssMatchSet.
	Name *string `min:"1" type:"string"`

	// A unique identifier for an XssMatchSet. You use XssMatchSetId to get information
	// about an XssMatchSet (see GetXssMatchSet), update an XssMatchSet (see UpdateXssMatchSet),
	// insert an XssMatchSet into a Rule or delete one from a Rule (see UpdateRule),
	// and delete an XssMatchSet from AWS WAF (see DeleteXssMatchSet).
	//
	// XssMatchSetId is returned by CreateXssMatchSet and by ListXssMatchSets.
	//
	// XssMatchSetId is a required field
	XssMatchSetId *string `min:"1" type:"string" required:"true"`

	// Specifies the parts of web requests that you want to inspect for cross-site
	// scripting attacks.
	//
	// XssMatchTuples is a required field
	XssMatchTuples []*XssMatchTuple `type:"list" required:"true"`
}

// String returns the string representation
func (s XssMatchSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s XssMatchSet) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *XssMatchSet) SetName(v string) *XssMatchSet {
	s.Name = &v
	return s
}

// SetXssMatchSetId sets the XssMatchSetId field's value.
func (s *XssMatchSet) SetXssMatchSetId(v string) *XssMatchSet {
	s.XssMatchSetId = &v
	return s
}

// SetXssMatchTuples sets the XssMatchTuples field's value.
func (s *XssMatchSet) SetXssMatchTuples(v []*XssMatchTuple) *XssMatchSet {
	s.XssMatchTuples = v
	return s
}

// The Id and Name of an XssMatchSet.
type XssMatchSetSummary struct {
	_ struct{} `type:"structure"`

	// The name of the XssMatchSet, if any, specified by Id.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A unique identifier for an XssMatchSet. You use XssMatchSetId to get information
	// about a XssMatchSet (see GetXssMatchSet), update an XssMatchSet (see UpdateXssMatchSet),
	// insert an XssMatchSet into a Rule or delete one from a Rule (see UpdateRule),
	// and delete an XssMatchSet from AWS WAF (see DeleteXssMatchSet).
	//
	// XssMatchSetId is returned by CreateXssMatchSet and by ListXssMatchSets.
	//
	// XssMatchSetId is a required field
	XssMatchSetId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s XssMatchSetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s XssMatchSetSummary) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *XssMatchSetSummary) SetName(v string) *XssMatchSetSummary {
	s.Name = &v
	return s
}

// SetXssMatchSetId sets the XssMatchSetId field's value.
func (s *XssMatchSetSummary) SetXssMatchSetId(v string) *XssMatchSetSummary {
	s.XssMatchSetId = &v
	return s
}

// Specifies the part of a web request that you want to inspect for cross-site
// scripting attacks and indicates whether you want to add the specification
// to an XssMatchSet or delete it from an XssMatchSet.
type XssMatchSetUpdate struct {
	_ struct{} `type:"structure"`

	// Specify INSERT to add an XssMatchSetUpdate to an XssMatchSet. Use DELETE
	// to remove an XssMatchSetUpdate from an XssMatchSet.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"ChangeAction"`

	// Specifies the part of a web request that you want AWS WAF to inspect for
	// cross-site scripting attacks and, if you want AWS WAF to inspect a header,
	// the name of the header.
	//
	// XssMatchTuple is a required field
	XssMatchTuple *XssMatchTuple `type:"structure" required:"true"`
}

// String returns the string representation
func (s XssMatchSetUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s XssMatchSetUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *XssMatchSetUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "XssMatchSetUpdate"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.XssMatchTuple == nil {
		invalidParams.Add(request.NewErrParamRequired("XssMatchTuple"))
	}
	if s.XssMatchTuple != nil {
		if err := s.XssMatchTuple.Validate(); err != nil {
			invalidParams.AddNested("XssMatchTuple", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *XssMatchSetUpdate) SetAction(v string) *XssMatchSetUpdate {
	s.Action = &v
	return s
}

// SetXssMatchTuple sets the XssMatchTuple field's value.
func (s *XssMatchSetUpdate) SetXssMatchTuple(v *XssMatchTuple) *XssMatchSetUpdate {
	s.XssMatchTuple = v
	return s
}

// Specifies the part of a web request that you want AWS WAF to inspect for
// cross-site scripting attacks and, if you want AWS WAF to inspect a header,
// the name of the header.
type XssMatchTuple struct {
	_ struct{} `type:"structure"`

	// Specifies where in a web request to look for cross-site scripting attacks.
	//
	// FieldToMatch is a required field
	FieldToMatch *FieldToMatch `type:"structure" required:"true"`

	// Text transformations eliminate some of the unusual formatting that attackers
	// use in web requests in an effort to bypass AWS WAF. If you specify a transformation,
	// AWS WAF performs the transformation on FieldToMatch before inspecting a request
	// for a match.
	//
	// You can only specify a single type of TextTransformation.
	//
	// CMD_LINE
	//
	// When you're concerned that attackers are injecting an operating system command
	// line command and using unusual formatting to disguise some or all of the
	// command, use this option to perform the following transformations:
	//
	//    * Delete the following characters: \ " ' ^
	//
	//    * Delete spaces before the following characters: / (
	//
	//    * Replace the following characters with a space: , ;
	//
	//    * Replace multiple spaces with one space
	//
	//    * Convert uppercase letters (A-Z) to lowercase (a-z)
	//
	// COMPRESS_WHITE_SPACE
	//
	// Use this option to replace the following characters with a space character
	// (decimal 32):
	//
	//    * \f, formfeed, decimal 12
	//
	//    * \t, tab, decimal 9
	//
	//    * \n, newline, decimal 10
	//
	//    * \r, carriage return, decimal 13
	//
	//    * \v, vertical tab, decimal 11
	//
	//    * non-breaking space, decimal 160
	//
	// COMPRESS_WHITE_SPACE also replaces multiple spaces with one space.
	//
	// HTML_ENTITY_DECODE
	//
	// Use this option to replace HTML-encoded characters with unencoded characters.
	// HTML_ENTITY_DECODE performs the following operations:
	//
	//    * Replaces (ampersand)quot; with "
	//
	//    * Replaces (ampersand)nbsp; with a non-breaking space, decimal 160
	//
	//    * Replaces (ampersand)lt; with a "less than" symbol
	//
	//    * Replaces (ampersand)gt; with >
	//
	//    * Replaces characters that are represented in hexadecimal format, (ampersand)#xhhhh;,
	//    with the corresponding characters
	//
	//    * Replaces characters that are represented in decimal format, (ampersand)#nnnn;,
	//    with the corresponding characters
	//
	// LOWERCASE
	//
	// Use this option to convert uppercase letters (A-Z) to lowercase (a-z).
	//
	// URL_DECODE
	//
	// Use this option to decode a URL-encoded value.
	//
	// NONE
	//
	// Specify NONE if you don't want to perform any text transformations.
	//
	// TextTransformation is a required field
	TextTransformation *string `type:"string" required:"true" enum:"TextTransformation"`
}

// String returns the string representation
func (s XssMatchTuple) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s XssMatchTuple) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *XssMatchTuple) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "XssMatchTuple"}
	if s.FieldToMatch == nil {
		invalidParams.Add(request.NewErrParamRequired("FieldToMatch"))
	}
	if s.TextTransformation == nil {
		invalidParams.Add(request.NewErrParamRequired("TextTransformation"))
	}
	if s.FieldToMatch != nil {
		if err := s.FieldToMatch.Validate(); err != nil {
			invalidParams.AddNested("FieldToMatch", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFieldToMatch sets the FieldToMatch field's value.
func (s *XssMatchTuple) SetFieldToMatch(v *FieldToMatch) *XssMatchTuple {
	s.FieldToMatch = v
	return s
}

// SetTextTransformation sets the TextTransformation field's value.
func (s *XssMatchTuple) SetTextTransformation(v string) *XssMatchTuple {
	s.TextTransformation = &v
	return s
}

const (
	// ChangeActionInsert is a ChangeAction enum value
	ChangeActionInsert = "INSERT"

	// ChangeActionDelete is a ChangeAction enum value
	ChangeActionDelete = "DELETE"
)

const (
	// ChangeTokenStatusProvisioned is a ChangeTokenStatus enum value
	ChangeTokenStatusProvisioned = "PROVISIONED"

	// ChangeTokenStatusPending is a ChangeTokenStatus enum value
	ChangeTokenStatusPending = "PENDING"

	// ChangeTokenStatusInsync is a ChangeTokenStatus enum value
	ChangeTokenStatusInsync = "INSYNC"
)

const (
	// ComparisonOperatorEq is a ComparisonOperator enum value
	ComparisonOperatorEq = "EQ"

	// ComparisonOperatorNe is a ComparisonOperator enum value
	ComparisonOperatorNe = "NE"

	// ComparisonOperatorLe is a ComparisonOperator enum value
	ComparisonOperatorLe = "LE"

	// ComparisonOperatorLt is a ComparisonOperator enum value
	ComparisonOperatorLt = "LT"

	// ComparisonOperatorGe is a ComparisonOperator enum value
	ComparisonOperatorGe = "GE"

	// ComparisonOperatorGt is a ComparisonOperator enum value
	ComparisonOperatorGt = "GT"
)

const (
	// GeoMatchConstraintTypeCountry is a GeoMatchConstraintType enum value
	GeoMatchConstraintTypeCountry = "Country"
)

const (
	// GeoMatchConstraintValueAf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAf = "AF"

	// GeoMatchConstraintValueAx is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAx = "AX"

	// GeoMatchConstraintValueAl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAl = "AL"

	// GeoMatchConstraintValueDz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueDz = "DZ"

	// GeoMatchConstraintValueAs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAs = "AS"

	// GeoMatchConstraintValueAd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAd = "AD"

	// GeoMatchConstraintValueAo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAo = "AO"

	// GeoMatchConstraintValueAi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAi = "AI"

	// GeoMatchConstraintValueAq is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAq = "AQ"

	// GeoMatchConstraintValueAg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAg = "AG"

	// GeoMatchConstraintValueAr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAr = "AR"

	// GeoMatchConstraintValueAm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAm = "AM"

	// GeoMatchConstraintValueAw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAw = "AW"

	// GeoMatchConstraintValueAu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAu = "AU"

	// GeoMatchConstraintValueAt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAt = "AT"

	// GeoMatchConstraintValueAz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAz = "AZ"

	// GeoMatchConstraintValueBs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBs = "BS"

	// GeoMatchConstraintValueBh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBh = "BH"

	// GeoMatchConstraintValueBd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBd = "BD"

	// GeoMatchConstraintValueBb is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBb = "BB"

	// GeoMatchConstraintValueBy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBy = "BY"

	// GeoMatchConstraintValueBe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBe = "BE"

	// GeoMatchConstraintValueBz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBz = "BZ"

	// GeoMatchConstraintValueBj is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBj = "BJ"

	// GeoMatchConstraintValueBm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBm = "BM"

	// GeoMatchConstraintValueBt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBt = "BT"

	// GeoMatchConstraintValueBo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBo = "BO"

	// GeoMatchConstraintValueBq is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBq = "BQ"

	// GeoMatchConstraintValueBa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBa = "BA"

	// GeoMatchConstraintValueBw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBw = "BW"

	// GeoMatchConstraintValueBv is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBv = "BV"

	// GeoMatchConstraintValueBr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBr = "BR"

	// GeoMatchConstraintValueIo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIo = "IO"

	// GeoMatchConstraintValueBn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBn = "BN"

	// GeoMatchConstraintValueBg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBg = "BG"

	// GeoMatchConstraintValueBf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBf = "BF"

	// GeoMatchConstraintValueBi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBi = "BI"

	// GeoMatchConstraintValueKh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKh = "KH"

	// GeoMatchConstraintValueCm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCm = "CM"

	// GeoMatchConstraintValueCa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCa = "CA"

	// GeoMatchConstraintValueCv is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCv = "CV"

	// GeoMatchConstraintValueKy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKy = "KY"

	// GeoMatchConstraintValueCf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCf = "CF"

	// GeoMatchConstraintValueTd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTd = "TD"

	// GeoMatchConstraintValueCl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCl = "CL"

	// GeoMatchConstraintValueCn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCn = "CN"

	// GeoMatchConstraintValueCx is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCx = "CX"

	// GeoMatchConstraintValueCc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCc = "CC"

	// GeoMatchConstraintValueCo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCo = "CO"

	// GeoMatchConstraintValueKm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKm = "KM"

	// GeoMatchConstraintValueCg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCg = "CG"

	// GeoMatchConstraintValueCd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCd = "CD"

	// GeoMatchConstraintValueCk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCk = "CK"

	// GeoMatchConstraintValueCr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCr = "CR"

	// GeoMatchConstraintValueCi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCi = "CI"

	// GeoMatchConstraintValueHr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueHr = "HR"

	// GeoMatchConstraintValueCu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCu = "CU"

	// GeoMatchConstraintValueCw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCw = "CW"

	// GeoMatchConstraintValueCy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCy = "CY"

	// GeoMatchConstraintValueCz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCz = "CZ"

	// GeoMatchConstraintValueDk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueDk = "DK"

	// GeoMatchConstraintValueDj is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueDj = "DJ"

	// GeoMatchConstraintValueDm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueDm = "DM"

	// GeoMatchConstraintValueDo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueDo = "DO"

	// GeoMatchConstraintValueEc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEc = "EC"

	// GeoMatchConstraintValueEg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEg = "EG"

	// GeoMatchConstraintValueSv is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSv = "SV"

	// GeoMatchConstraintValueGq is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGq = "GQ"

	// GeoMatchConstraintValueEr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEr = "ER"

	// GeoMatchConstraintValueEe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEe = "EE"

	// GeoMatchConstraintValueEt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEt = "ET"

	// GeoMatchConstraintValueFk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueFk = "FK"

	// GeoMatchConstraintValueFo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueFo = "FO"

	// GeoMatchConstraintValueFj is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueFj = "FJ"

	// GeoMatchConstraintValueFi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueFi = "FI"

	// GeoMatchConstraintValueFr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueFr = "FR"

	// GeoMatchConstraintValueGf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGf = "GF"

	// GeoMatchConstraintValuePf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePf = "PF"

	// GeoMatchConstraintValueTf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTf = "TF"

	// GeoMatchConstraintValueGa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGa = "GA"

	// GeoMatchConstraintValueGm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGm = "GM"

	// GeoMatchConstraintValueGe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGe = "GE"

	// GeoMatchConstraintValueDe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueDe = "DE"

	// GeoMatchConstraintValueGh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGh = "GH"

	// GeoMatchConstraintValueGi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGi = "GI"

	// GeoMatchConstraintValueGr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGr = "GR"

	// GeoMatchConstraintValueGl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGl = "GL"

	// GeoMatchConstraintValueGd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGd = "GD"

	// GeoMatchConstraintValueGp is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGp = "GP"

	// GeoMatchConstraintValueGu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGu = "GU"

	// GeoMatchConstraintValueGt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGt = "GT"

	// GeoMatchConstraintValueGg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGg = "GG"

	// GeoMatchConstraintValueGn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGn = "GN"

	// GeoMatchConstraintValueGw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGw = "GW"

	// GeoMatchConstraintValueGy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGy = "GY"

	// GeoMatchConstraintValueHt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueHt = "HT"

	// GeoMatchConstraintValueHm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueHm = "HM"

	// GeoMatchConstraintValueVa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVa = "VA"

	// GeoMatchConstraintValueHn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueHn = "HN"

	// GeoMatchConstraintValueHk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueHk = "HK"

	// GeoMatchConstraintValueHu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueHu = "HU"

	// GeoMatchConstraintValueIs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIs = "IS"

	// GeoMatchConstraintValueIn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIn = "IN"

	// GeoMatchConstraintValueId is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueId = "ID"

	// GeoMatchConstraintValueIr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIr = "IR"

	// GeoMatchConstraintValueIq is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIq = "IQ"

	// GeoMatchConstraintValueIe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIe = "IE"

	// GeoMatchConstraintValueIm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIm = "IM"

	// GeoMatchConstraintValueIl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIl = "IL"

	// GeoMatchConstraintValueIt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueIt = "IT"

	// GeoMatchConstraintValueJm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueJm = "JM"

	// GeoMatchConstraintValueJp is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueJp = "JP"

	// GeoMatchConstraintValueJe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueJe = "JE"

	// GeoMatchConstraintValueJo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueJo = "JO"

	// GeoMatchConstraintValueKz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKz = "KZ"

	// GeoMatchConstraintValueKe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKe = "KE"

	// GeoMatchConstraintValueKi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKi = "KI"

	// GeoMatchConstraintValueKp is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKp = "KP"

	// GeoMatchConstraintValueKr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKr = "KR"

	// GeoMatchConstraintValueKw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKw = "KW"

	// GeoMatchConstraintValueKg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKg = "KG"

	// GeoMatchConstraintValueLa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLa = "LA"

	// GeoMatchConstraintValueLv is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLv = "LV"

	// GeoMatchConstraintValueLb is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLb = "LB"

	// GeoMatchConstraintValueLs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLs = "LS"

	// GeoMatchConstraintValueLr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLr = "LR"

	// GeoMatchConstraintValueLy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLy = "LY"

	// GeoMatchConstraintValueLi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLi = "LI"

	// GeoMatchConstraintValueLt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLt = "LT"

	// GeoMatchConstraintValueLu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLu = "LU"

	// GeoMatchConstraintValueMo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMo = "MO"

	// GeoMatchConstraintValueMk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMk = "MK"

	// GeoMatchConstraintValueMg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMg = "MG"

	// GeoMatchConstraintValueMw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMw = "MW"

	// GeoMatchConstraintValueMy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMy = "MY"

	// GeoMatchConstraintValueMv is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMv = "MV"

	// GeoMatchConstraintValueMl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMl = "ML"

	// GeoMatchConstraintValueMt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMt = "MT"

	// GeoMatchConstraintValueMh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMh = "MH"

	// GeoMatchConstraintValueMq is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMq = "MQ"

	// GeoMatchConstraintValueMr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMr = "MR"

	// GeoMatchConstraintValueMu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMu = "MU"

	// GeoMatchConstraintValueYt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueYt = "YT"

	// GeoMatchConstraintValueMx is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMx = "MX"

	// GeoMatchConstraintValueFm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueFm = "FM"

	// GeoMatchConstraintValueMd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMd = "MD"

	// GeoMatchConstraintValueMc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMc = "MC"

	// GeoMatchConstraintValueMn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMn = "MN"

	// GeoMatchConstraintValueMe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMe = "ME"

	// GeoMatchConstraintValueMs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMs = "MS"

	// GeoMatchConstraintValueMa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMa = "MA"

	// GeoMatchConstraintValueMz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMz = "MZ"

	// GeoMatchConstraintValueMm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMm = "MM"

	// GeoMatchConstraintValueNa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNa = "NA"

	// GeoMatchConstraintValueNr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNr = "NR"

	// GeoMatchConstraintValueNp is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNp = "NP"

	// GeoMatchConstraintValueNl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNl = "NL"

	// GeoMatchConstraintValueNc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNc = "NC"

	// GeoMatchConstraintValueNz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNz = "NZ"

	// GeoMatchConstraintValueNi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNi = "NI"

	// GeoMatchConstraintValueNe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNe = "NE"

	// GeoMatchConstraintValueNg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNg = "NG"

	// GeoMatchConstraintValueNu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNu = "NU"

	// GeoMatchConstraintValueNf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNf = "NF"

	// GeoMatchConstraintValueMp is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMp = "MP"

	// GeoMatchConstraintValueNo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueNo = "NO"

	// GeoMatchConstraintValueOm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueOm = "OM"

	// GeoMatchConstraintValuePk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePk = "PK"

	// GeoMatchConstraintValuePw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePw = "PW"

	// GeoMatchConstraintValuePs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePs = "PS"

	// GeoMatchConstraintValuePa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePa = "PA"

	// GeoMatchConstraintValuePg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePg = "PG"

	// GeoMatchConstraintValuePy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePy = "PY"

	// GeoMatchConstraintValuePe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePe = "PE"

	// GeoMatchConstraintValuePh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePh = "PH"

	// GeoMatchConstraintValuePn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePn = "PN"

	// GeoMatchConstraintValuePl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePl = "PL"

	// GeoMatchConstraintValuePt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePt = "PT"

	// GeoMatchConstraintValuePr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePr = "PR"

	// GeoMatchConstraintValueQa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueQa = "QA"

	// GeoMatchConstraintValueRe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueRe = "RE"

	// GeoMatchConstraintValueRo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueRo = "RO"

	// GeoMatchConstraintValueRu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueRu = "RU"

	// GeoMatchConstraintValueRw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueRw = "RW"

	// GeoMatchConstraintValueBl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueBl = "BL"

	// GeoMatchConstraintValueSh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSh = "SH"

	// GeoMatchConstraintValueKn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueKn = "KN"

	// GeoMatchConstraintValueLc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLc = "LC"

	// GeoMatchConstraintValueMf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueMf = "MF"

	// GeoMatchConstraintValuePm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValuePm = "PM"

	// GeoMatchConstraintValueVc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVc = "VC"

	// GeoMatchConstraintValueWs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueWs = "WS"

	// GeoMatchConstraintValueSm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSm = "SM"

	// GeoMatchConstraintValueSt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSt = "ST"

	// GeoMatchConstraintValueSa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSa = "SA"

	// GeoMatchConstraintValueSn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSn = "SN"

	// GeoMatchConstraintValueRs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueRs = "RS"

	// GeoMatchConstraintValueSc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSc = "SC"

	// GeoMatchConstraintValueSl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSl = "SL"

	// GeoMatchConstraintValueSg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSg = "SG"

	// GeoMatchConstraintValueSx is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSx = "SX"

	// GeoMatchConstraintValueSk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSk = "SK"

	// GeoMatchConstraintValueSi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSi = "SI"

	// GeoMatchConstraintValueSb is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSb = "SB"

	// GeoMatchConstraintValueSo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSo = "SO"

	// GeoMatchConstraintValueZa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueZa = "ZA"

	// GeoMatchConstraintValueGs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGs = "GS"

	// GeoMatchConstraintValueSs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSs = "SS"

	// GeoMatchConstraintValueEs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEs = "ES"

	// GeoMatchConstraintValueLk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueLk = "LK"

	// GeoMatchConstraintValueSd is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSd = "SD"

	// GeoMatchConstraintValueSr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSr = "SR"

	// GeoMatchConstraintValueSj is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSj = "SJ"

	// GeoMatchConstraintValueSz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSz = "SZ"

	// GeoMatchConstraintValueSe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSe = "SE"

	// GeoMatchConstraintValueCh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueCh = "CH"

	// GeoMatchConstraintValueSy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueSy = "SY"

	// GeoMatchConstraintValueTw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTw = "TW"

	// GeoMatchConstraintValueTj is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTj = "TJ"

	// GeoMatchConstraintValueTz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTz = "TZ"

	// GeoMatchConstraintValueTh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTh = "TH"

	// GeoMatchConstraintValueTl is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTl = "TL"

	// GeoMatchConstraintValueTg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTg = "TG"

	// GeoMatchConstraintValueTk is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTk = "TK"

	// GeoMatchConstraintValueTo is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTo = "TO"

	// GeoMatchConstraintValueTt is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTt = "TT"

	// GeoMatchConstraintValueTn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTn = "TN"

	// GeoMatchConstraintValueTr is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTr = "TR"

	// GeoMatchConstraintValueTm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTm = "TM"

	// GeoMatchConstraintValueTc is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTc = "TC"

	// GeoMatchConstraintValueTv is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueTv = "TV"

	// GeoMatchConstraintValueUg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueUg = "UG"

	// GeoMatchConstraintValueUa is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueUa = "UA"

	// GeoMatchConstraintValueAe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueAe = "AE"

	// GeoMatchConstraintValueGb is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueGb = "GB"

	// GeoMatchConstraintValueUs is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueUs = "US"

	// GeoMatchConstraintValueUm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueUm = "UM"

	// GeoMatchConstraintValueUy is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueUy = "UY"

	// GeoMatchConstraintValueUz is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueUz = "UZ"

	// GeoMatchConstraintValueVu is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVu = "VU"

	// GeoMatchConstraintValueVe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVe = "VE"

	// GeoMatchConstraintValueVn is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVn = "VN"

	// GeoMatchConstraintValueVg is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVg = "VG"

	// GeoMatchConstraintValueVi is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueVi = "VI"

	// GeoMatchConstraintValueWf is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueWf = "WF"

	// GeoMatchConstraintValueEh is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueEh = "EH"

	// GeoMatchConstraintValueYe is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueYe = "YE"

	// GeoMatchConstraintValueZm is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueZm = "ZM"

	// GeoMatchConstraintValueZw is a GeoMatchConstraintValue enum value
	GeoMatchConstraintValueZw = "ZW"
)

const (
	// IPSetDescriptorTypeIpv4 is a IPSetDescriptorType enum value
	IPSetDescriptorTypeIpv4 = "IPV4"

	// IPSetDescriptorTypeIpv6 is a IPSetDescriptorType enum value
	IPSetDescriptorTypeIpv6 = "IPV6"
)

const (
	// MatchFieldTypeUri is a MatchFieldType enum value
	MatchFieldTypeUri = "URI"

	// MatchFieldTypeQueryString is a MatchFieldType enum value
	MatchFieldTypeQueryString = "QUERY_STRING"

	// MatchFieldTypeHeader is a MatchFieldType enum value
	MatchFieldTypeHeader = "HEADER"

	// MatchFieldTypeMethod is a MatchFieldType enum value
	MatchFieldTypeMethod = "METHOD"

	// MatchFieldTypeBody is a MatchFieldType enum value
	MatchFieldTypeBody = "BODY"

	// MatchFieldTypeSingleQueryArg is a MatchFieldType enum value
	MatchFieldTypeSingleQueryArg = "SINGLE_QUERY_ARG"

	// MatchFieldTypeAllQueryArgs is a MatchFieldType enum value
	MatchFieldTypeAllQueryArgs = "ALL_QUERY_ARGS"
)

const (
	// ParameterExceptionFieldChangeAction is a ParameterExceptionField enum value
	ParameterExceptionFieldChangeAction = "CHANGE_ACTION"

	// ParameterExceptionFieldWafAction is a ParameterExceptionField enum value
	ParameterExceptionFieldWafAction = "WAF_ACTION"

	// ParameterExceptionFieldWafOverrideAction is a ParameterExceptionField enum value
	ParameterExceptionFieldWafOverrideAction = "WAF_OVERRIDE_ACTION"

	// ParameterExceptionFieldPredicateType is a ParameterExceptionField enum value
	ParameterExceptionFieldPredicateType = "PREDICATE_TYPE"

	// ParameterExceptionFieldIpsetType is a ParameterExceptionField enum value
	ParameterExceptionFieldIpsetType = "IPSET_TYPE"

	// ParameterExceptionFieldByteMatchFieldType is a ParameterExceptionField enum value
	ParameterExceptionFieldByteMatchFieldType = "BYTE_MATCH_FIELD_TYPE"

	// ParameterExceptionFieldSqlInjectionMatchFieldType is a ParameterExceptionField enum value
	ParameterExceptionFieldSqlInjectionMatchFieldType = "SQL_INJECTION_MATCH_FIELD_TYPE"

	// ParameterExceptionFieldByteMatchTextTransformation is a ParameterExceptionField enum value
	ParameterExceptionFieldByteMatchTextTransformation = "BYTE_MATCH_TEXT_TRANSFORMATION"

	// ParameterExceptionFieldByteMatchPositionalConstraint is a ParameterExceptionField enum value
	ParameterExceptionFieldByteMatchPositionalConstraint = "BYTE_MATCH_POSITIONAL_CONSTRAINT"

	// ParameterExceptionFieldSizeConstraintComparisonOperator is a ParameterExceptionField enum value
	ParameterExceptionFieldSizeConstraintComparisonOperator = "SIZE_CONSTRAINT_COMPARISON_OPERATOR"

	// ParameterExceptionFieldGeoMatchLocationType is a ParameterExceptionField enum value
	ParameterExceptionFieldGeoMatchLocationType = "GEO_MATCH_LOCATION_TYPE"

	// ParameterExceptionFieldGeoMatchLocationValue is a ParameterExceptionField enum value
	ParameterExceptionFieldGeoMatchLocationValue = "GEO_MATCH_LOCATION_VALUE"

	// ParameterExceptionFieldRateKey is a ParameterExceptionField enum value
	ParameterExceptionFieldRateKey = "RATE_KEY"

	// ParameterExceptionFieldRuleType is a ParameterExceptionField enum value
	ParameterExceptionFieldRuleType = "RULE_TYPE"

	// ParameterExceptionFieldNextMarker is a ParameterExceptionField enum value
	ParameterExceptionFieldNextMarker = "NEXT_MARKER"

	// ParameterExceptionFieldResourceArn is a ParameterExceptionField enum value
	ParameterExceptionFieldResourceArn = "RESOURCE_ARN"
)

const (
	// ParameterExceptionReasonInvalidOption is a ParameterExceptionReason enum value
	ParameterExceptionReasonInvalidOption = "INVALID_OPTION"

	// ParameterExceptionReasonIllegalCombination is a ParameterExceptionReason enum value
	ParameterExceptionReasonIllegalCombination = "ILLEGAL_COMBINATION"

	// ParameterExceptionReasonIllegalArgument is a ParameterExceptionReason enum value
	ParameterExceptionReasonIllegalArgument = "ILLEGAL_ARGUMENT"
)

const (
	// PositionalConstraintExactly is a PositionalConstraint enum value
	PositionalConstraintExactly = "EXACTLY"

	// PositionalConstraintStartsWith is a PositionalConstraint enum value
	PositionalConstraintStartsWith = "STARTS_WITH"

	// PositionalConstraintEndsWith is a PositionalConstraint enum value
	PositionalConstraintEndsWith = "ENDS_WITH"

	// PositionalConstraintContains is a PositionalConstraint enum value
	PositionalConstraintContains = "CONTAINS"

	// PositionalConstraintContainsWord is a PositionalConstraint enum value
	PositionalConstraintContainsWord = "CONTAINS_WORD"
)

const (
	// PredicateTypeIpmatch is a PredicateType enum value
	PredicateTypeIpmatch = "IPMatch"

	// PredicateTypeByteMatch is a PredicateType enum value
	PredicateTypeByteMatch = "ByteMatch"

	// PredicateTypeSqlInjectionMatch is a PredicateType enum value
	PredicateTypeSqlInjectionMatch = "SqlInjectionMatch"

	// PredicateTypeGeoMatch is a PredicateType enum value
	PredicateTypeGeoMatch = "GeoMatch"

	// PredicateTypeSizeConstraint is a PredicateType enum value
	PredicateTypeSizeConstraint = "SizeConstraint"

	// PredicateTypeXssMatch is a PredicateType enum value
	PredicateTypeXssMatch = "XssMatch"

	// PredicateTypeRegexMatch is a PredicateType enum value
	PredicateTypeRegexMatch = "RegexMatch"
)

const (
	// RateKeyIp is a RateKey enum value
	RateKeyIp = "IP"
)

const (
	// TextTransformationNone is a TextTransformation enum value
	TextTransformationNone = "NONE"

	// TextTransformationCompressWhiteSpace is a TextTransformation enum value
	TextTransformationCompressWhiteSpace = "COMPRESS_WHITE_SPACE"

	// TextTransformationHtmlEntityDecode is a TextTransformation enum value
	TextTransformationHtmlEntityDecode = "HTML_ENTITY_DECODE"

	// TextTransformationLowercase is a TextTransformation enum value
	TextTransformationLowercase = "LOWERCASE"

	// TextTransformationCmdLine is a TextTransformation enum value
	TextTransformationCmdLine = "CMD_LINE"

	// TextTransformationUrlDecode is a TextTransformation enum value
	TextTransformationUrlDecode = "URL_DECODE"
)

const (
	// WafActionTypeBlock is a WafActionType enum value
	WafActionTypeBlock = "BLOCK"

	// WafActionTypeAllow is a WafActionType enum value
	WafActionTypeAllow = "ALLOW"

	// WafActionTypeCount is a WafActionType enum value
	WafActionTypeCount = "COUNT"
)

const (
	// WafOverrideActionTypeNone is a WafOverrideActionType enum value
	WafOverrideActionTypeNone = "NONE"

	// WafOverrideActionTypeCount is a WafOverrideActionType enum value
	WafOverrideActionTypeCount = "COUNT"
)

const (
	// WafRuleTypeRegular is a WafRuleType enum value
	WafRuleTypeRegular = "REGULAR"

	// WafRuleTypeRateBased is a WafRuleType enum value
	WafRuleTypeRateBased = "RATE_BASED"

	// WafRuleTypeGroup is a WafRuleType enum value
	WafRuleTypeGroup = "GROUP"
)
