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

package shield

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 opAssociateDRTLogBucket = "AssociateDRTLogBucket"

// AssociateDRTLogBucketRequest generates a "aws/request.Request" representing the
// client's request for the AssociateDRTLogBucket 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 AssociateDRTLogBucket for more information on using the AssociateDRTLogBucket
// 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 AssociateDRTLogBucketRequest method.
//    req, resp := client.AssociateDRTLogBucketRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateDRTLogBucket
func (c *Shield) AssociateDRTLogBucketRequest(input *AssociateDRTLogBucketInput) (req *request.Request, output *AssociateDRTLogBucketOutput) {
	op := &request.Operation{
		Name:       opAssociateDRTLogBucket,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateDRTLogBucketInput{}
	}

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

// AssociateDRTLogBucket API operation for AWS Shield.
//
// Authorizes the DDoS Response Team (DRT) to access the specified Amazon S3
// bucket containing your AWS WAF logs. You can associate up to 10 Amazon S3
// buckets with your subscription.
//
// To use the services of the DRT and make an AssociateDRTLogBucket request,
// you must be subscribed to the Business Support plan (https://aws.amazon.com/premiumsupport/business-support/)
// or the Enterprise Support plan (https://aws.amazon.com/premiumsupport/enterprise-support/).
//
// 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 Shield's
// API operation AssociateDRTLogBucket for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * NoAssociatedRoleException
//   The ARN of the role that you specifed does not exist.
//
//   * LimitsExceededException
//   Exception that indicates that the operation would exceed a limit.
//
//   Type is the type of limit that would be exceeded.
//
//   Limit is the threshold that would be exceeded.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * AccessDeniedForDependencyException
//   In order to grant the necessary access to the DDoS Response Team (DRT), the
//   user submitting the request must have the iam:PassRole permission. This error
//   indicates the user did not have the appropriate permissions. For more information,
//   see Granting a User Permissions to Pass a Role to an AWS Service (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateDRTLogBucket
func (c *Shield) AssociateDRTLogBucket(input *AssociateDRTLogBucketInput) (*AssociateDRTLogBucketOutput, error) {
	req, out := c.AssociateDRTLogBucketRequest(input)
	return out, req.Send()
}

// AssociateDRTLogBucketWithContext is the same as AssociateDRTLogBucket with the addition of
// the ability to pass a context and additional request options.
//
// See AssociateDRTLogBucket 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 *Shield) AssociateDRTLogBucketWithContext(ctx aws.Context, input *AssociateDRTLogBucketInput, opts ...request.Option) (*AssociateDRTLogBucketOutput, error) {
	req, out := c.AssociateDRTLogBucketRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opAssociateDRTRole = "AssociateDRTRole"

// AssociateDRTRoleRequest generates a "aws/request.Request" representing the
// client's request for the AssociateDRTRole 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 AssociateDRTRole for more information on using the AssociateDRTRole
// 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 AssociateDRTRoleRequest method.
//    req, resp := client.AssociateDRTRoleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateDRTRole
func (c *Shield) AssociateDRTRoleRequest(input *AssociateDRTRoleInput) (req *request.Request, output *AssociateDRTRoleOutput) {
	op := &request.Operation{
		Name:       opAssociateDRTRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateDRTRoleInput{}
	}

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

// AssociateDRTRole API operation for AWS Shield.
//
// Authorizes the DDoS Response Team (DRT), using the specified role, to access
// your AWS account to assist with DDoS attack mitigation during potential attacks.
// This enables the DRT to inspect your AWS WAF configuration and create or
// update AWS WAF rules and web ACLs.
//
// You can associate only one RoleArn with your subscription. If you submit
// an AssociateDRTRole request for an account that already has an associated
// role, the new RoleArn will replace the existing RoleArn.
//
// Prior to making the AssociateDRTRole request, you must attach the AWSShieldDRTAccessPolicy
// (https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSShieldDRTAccessPolicy)
// managed policy to the role you will specify in the request. For more information
// see Attaching and Detaching IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html).
// The role must also trust the service principal drt.shield.amazonaws.com.
// For more information, see IAM JSON Policy Elements: Principal (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html).
//
// The DRT will have access only to your AWS WAF and Shield resources. By submitting
// this request, you authorize the DRT to inspect your AWS WAF and Shield configuration
// and create and update AWS WAF rules and web ACLs on your behalf. The DRT
// takes these actions only if explicitly authorized by you.
//
// You must have the iam:PassRole permission to make an AssociateDRTRole request.
// For more information, see Granting a User Permissions to Pass a Role to an
// AWS Service (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).
//
// To use the services of the DRT and make an AssociateDRTRole request, you
// must be subscribed to the Business Support plan (https://aws.amazon.com/premiumsupport/business-support/)
// or the Enterprise Support plan (https://aws.amazon.com/premiumsupport/enterprise-support/).
//
// 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 Shield's
// API operation AssociateDRTRole for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * AccessDeniedForDependencyException
//   In order to grant the necessary access to the DDoS Response Team (DRT), the
//   user submitting the request must have the iam:PassRole permission. This error
//   indicates the user did not have the appropriate permissions. For more information,
//   see Granting a User Permissions to Pass a Role to an AWS Service (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateDRTRole
func (c *Shield) AssociateDRTRole(input *AssociateDRTRoleInput) (*AssociateDRTRoleOutput, error) {
	req, out := c.AssociateDRTRoleRequest(input)
	return out, req.Send()
}

// AssociateDRTRoleWithContext is the same as AssociateDRTRole with the addition of
// the ability to pass a context and additional request options.
//
// See AssociateDRTRole 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 *Shield) AssociateDRTRoleWithContext(ctx aws.Context, input *AssociateDRTRoleInput, opts ...request.Option) (*AssociateDRTRoleOutput, error) {
	req, out := c.AssociateDRTRoleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opAssociateHealthCheck = "AssociateHealthCheck"

// AssociateHealthCheckRequest generates a "aws/request.Request" representing the
// client's request for the AssociateHealthCheck 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 AssociateHealthCheck for more information on using the AssociateHealthCheck
// 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 AssociateHealthCheckRequest method.
//    req, resp := client.AssociateHealthCheckRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateHealthCheck
func (c *Shield) AssociateHealthCheckRequest(input *AssociateHealthCheckInput) (req *request.Request, output *AssociateHealthCheckOutput) {
	op := &request.Operation{
		Name:       opAssociateHealthCheck,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateHealthCheckInput{}
	}

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

// AssociateHealthCheck API operation for AWS Shield.
//
// Adds health-based detection to the Shield Advanced protection for a resource.
// Shield Advanced health-based detection uses the health of your AWS resource
// to improve responsiveness and accuracy in attack detection and mitigation.
//
// You define the health check in Route 53 and then associate it with your Shield
// Advanced protection. For more information, see Shield Advanced Health-Based
// Detection (https://docs.aws.amazon.com/waf/latest/developerguide/ddos-overview.html#ddos-advanced-health-check-option)
// in the AWS WAF and AWS Shield 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 Shield's
// API operation AssociateHealthCheck for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * LimitsExceededException
//   Exception that indicates that the operation would exceed a limit.
//
//   Type is the type of limit that would be exceeded.
//
//   Limit is the threshold that would be exceeded.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateHealthCheck
func (c *Shield) AssociateHealthCheck(input *AssociateHealthCheckInput) (*AssociateHealthCheckOutput, error) {
	req, out := c.AssociateHealthCheckRequest(input)
	return out, req.Send()
}

// AssociateHealthCheckWithContext is the same as AssociateHealthCheck with the addition of
// the ability to pass a context and additional request options.
//
// See AssociateHealthCheck 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 *Shield) AssociateHealthCheckWithContext(ctx aws.Context, input *AssociateHealthCheckInput, opts ...request.Option) (*AssociateHealthCheckOutput, error) {
	req, out := c.AssociateHealthCheckRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opAssociateProactiveEngagementDetails = "AssociateProactiveEngagementDetails"

// AssociateProactiveEngagementDetailsRequest generates a "aws/request.Request" representing the
// client's request for the AssociateProactiveEngagementDetails 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 AssociateProactiveEngagementDetails for more information on using the AssociateProactiveEngagementDetails
// 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 AssociateProactiveEngagementDetailsRequest method.
//    req, resp := client.AssociateProactiveEngagementDetailsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateProactiveEngagementDetails
func (c *Shield) AssociateProactiveEngagementDetailsRequest(input *AssociateProactiveEngagementDetailsInput) (req *request.Request, output *AssociateProactiveEngagementDetailsOutput) {
	op := &request.Operation{
		Name:       opAssociateProactiveEngagementDetails,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateProactiveEngagementDetailsInput{}
	}

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

// AssociateProactiveEngagementDetails API operation for AWS Shield.
//
// Initializes proactive engagement and sets the list of contacts for the DDoS
// Response Team (DRT) to use. You must provide at least one phone number in
// the emergency contact list.
//
// After you have initialized proactive engagement using this call, to disable
// or enable proactive engagement, use the calls DisableProactiveEngagement
// and EnableProactiveEngagement.
//
// This call defines the list of email addresses and phone numbers that the
// DDoS Response Team (DRT) can use to contact you for escalations to the DRT
// and to initiate proactive customer support.
//
// The contacts that you provide in the request replace any contacts that were
// already defined. If you already have contacts defined and want to use them,
// retrieve the list using DescribeEmergencyContactSettings and then provide
// it to this call.
//
// 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 Shield's
// API operation AssociateProactiveEngagementDetails for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/AssociateProactiveEngagementDetails
func (c *Shield) AssociateProactiveEngagementDetails(input *AssociateProactiveEngagementDetailsInput) (*AssociateProactiveEngagementDetailsOutput, error) {
	req, out := c.AssociateProactiveEngagementDetailsRequest(input)
	return out, req.Send()
}

// AssociateProactiveEngagementDetailsWithContext is the same as AssociateProactiveEngagementDetails with the addition of
// the ability to pass a context and additional request options.
//
// See AssociateProactiveEngagementDetails 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 *Shield) AssociateProactiveEngagementDetailsWithContext(ctx aws.Context, input *AssociateProactiveEngagementDetailsInput, opts ...request.Option) (*AssociateProactiveEngagementDetailsOutput, error) {
	req, out := c.AssociateProactiveEngagementDetailsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateProtection = "CreateProtection"

// CreateProtectionRequest generates a "aws/request.Request" representing the
// client's request for the CreateProtection 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 CreateProtection for more information on using the CreateProtection
// 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 CreateProtectionRequest method.
//    req, resp := client.CreateProtectionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/CreateProtection
func (c *Shield) CreateProtectionRequest(input *CreateProtectionInput) (req *request.Request, output *CreateProtectionOutput) {
	op := &request.Operation{
		Name:       opCreateProtection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateProtectionInput{}
	}

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

// CreateProtection API operation for AWS Shield.
//
// Enables AWS Shield Advanced for a specific AWS resource. The resource can
// be an Amazon CloudFront distribution, Elastic Load Balancing load balancer,
// AWS Global Accelerator accelerator, Elastic IP Address, or an Amazon Route
// 53 hosted zone.
//
// You can add protection to only a single resource with each CreateProtection
// request. If you want to add protection to multiple resources at once, use
// the AWS WAF console (https://console.aws.amazon.com/waf/). For more information
// see Getting Started with AWS Shield Advanced (https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-ddos.html)
// and Add AWS Shield Advanced Protection to more AWS Resources (https://docs.aws.amazon.com/waf/latest/developerguide/configure-new-protection.html).
//
// 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 Shield's
// API operation CreateProtection for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidResourceException
//   Exception that indicates that the resource is invalid. You might not have
//   access to the resource, or the resource might not exist.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * LimitsExceededException
//   Exception that indicates that the operation would exceed a limit.
//
//   Type is the type of limit that would be exceeded.
//
//   Limit is the threshold that would be exceeded.
//
//   * ResourceAlreadyExistsException
//   Exception indicating the specified resource already exists. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/CreateProtection
func (c *Shield) CreateProtection(input *CreateProtectionInput) (*CreateProtectionOutput, error) {
	req, out := c.CreateProtectionRequest(input)
	return out, req.Send()
}

// CreateProtectionWithContext is the same as CreateProtection with the addition of
// the ability to pass a context and additional request options.
//
// See CreateProtection 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 *Shield) CreateProtectionWithContext(ctx aws.Context, input *CreateProtectionInput, opts ...request.Option) (*CreateProtectionOutput, error) {
	req, out := c.CreateProtectionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateProtectionGroup = "CreateProtectionGroup"

// CreateProtectionGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateProtectionGroup 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 CreateProtectionGroup for more information on using the CreateProtectionGroup
// 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 CreateProtectionGroupRequest method.
//    req, resp := client.CreateProtectionGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/CreateProtectionGroup
func (c *Shield) CreateProtectionGroupRequest(input *CreateProtectionGroupInput) (req *request.Request, output *CreateProtectionGroupOutput) {
	op := &request.Operation{
		Name:       opCreateProtectionGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateProtectionGroupInput{}
	}

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

// CreateProtectionGroup API operation for AWS Shield.
//
// Creates a grouping of protected resources so they can be handled as a collective.
// This resource grouping improves the accuracy of detection and reduces false
// positives.
//
// 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 Shield's
// API operation CreateProtectionGroup for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceAlreadyExistsException
//   Exception indicating the specified resource already exists. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * LimitsExceededException
//   Exception that indicates that the operation would exceed a limit.
//
//   Type is the type of limit that would be exceeded.
//
//   Limit is the threshold that would be exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/CreateProtectionGroup
func (c *Shield) CreateProtectionGroup(input *CreateProtectionGroupInput) (*CreateProtectionGroupOutput, error) {
	req, out := c.CreateProtectionGroupRequest(input)
	return out, req.Send()
}

// CreateProtectionGroupWithContext is the same as CreateProtectionGroup with the addition of
// the ability to pass a context and additional request options.
//
// See CreateProtectionGroup 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 *Shield) CreateProtectionGroupWithContext(ctx aws.Context, input *CreateProtectionGroupInput, opts ...request.Option) (*CreateProtectionGroupOutput, error) {
	req, out := c.CreateProtectionGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateSubscription = "CreateSubscription"

// CreateSubscriptionRequest generates a "aws/request.Request" representing the
// client's request for the CreateSubscription 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 CreateSubscription for more information on using the CreateSubscription
// 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 CreateSubscriptionRequest method.
//    req, resp := client.CreateSubscriptionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/CreateSubscription
func (c *Shield) CreateSubscriptionRequest(input *CreateSubscriptionInput) (req *request.Request, output *CreateSubscriptionOutput) {
	op := &request.Operation{
		Name:       opCreateSubscription,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateSubscriptionInput{}
	}

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

// CreateSubscription API operation for AWS Shield.
//
// Activates AWS Shield Advanced for an account.
//
// When you initally create a subscription, your subscription is set to be automatically
// renewed at the end of the existing subscription period. You can change this
// by submitting an UpdateSubscription 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 Shield's
// API operation CreateSubscription for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceAlreadyExistsException
//   Exception indicating the specified resource already exists. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/CreateSubscription
func (c *Shield) CreateSubscription(input *CreateSubscriptionInput) (*CreateSubscriptionOutput, error) {
	req, out := c.CreateSubscriptionRequest(input)
	return out, req.Send()
}

// CreateSubscriptionWithContext is the same as CreateSubscription with the addition of
// the ability to pass a context and additional request options.
//
// See CreateSubscription 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 *Shield) CreateSubscriptionWithContext(ctx aws.Context, input *CreateSubscriptionInput, opts ...request.Option) (*CreateSubscriptionOutput, error) {
	req, out := c.CreateSubscriptionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteProtection = "DeleteProtection"

// DeleteProtectionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteProtection 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 DeleteProtection for more information on using the DeleteProtection
// 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 DeleteProtectionRequest method.
//    req, resp := client.DeleteProtectionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DeleteProtection
func (c *Shield) DeleteProtectionRequest(input *DeleteProtectionInput) (req *request.Request, output *DeleteProtectionOutput) {
	op := &request.Operation{
		Name:       opDeleteProtection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteProtectionInput{}
	}

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

// DeleteProtection API operation for AWS Shield.
//
// Deletes an AWS Shield Advanced Protection.
//
// 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 Shield's
// API operation DeleteProtection for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DeleteProtection
func (c *Shield) DeleteProtection(input *DeleteProtectionInput) (*DeleteProtectionOutput, error) {
	req, out := c.DeleteProtectionRequest(input)
	return out, req.Send()
}

// DeleteProtectionWithContext is the same as DeleteProtection with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteProtection 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 *Shield) DeleteProtectionWithContext(ctx aws.Context, input *DeleteProtectionInput, opts ...request.Option) (*DeleteProtectionOutput, error) {
	req, out := c.DeleteProtectionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteProtectionGroup = "DeleteProtectionGroup"

// DeleteProtectionGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteProtectionGroup 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 DeleteProtectionGroup for more information on using the DeleteProtectionGroup
// 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 DeleteProtectionGroupRequest method.
//    req, resp := client.DeleteProtectionGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DeleteProtectionGroup
func (c *Shield) DeleteProtectionGroupRequest(input *DeleteProtectionGroupInput) (req *request.Request, output *DeleteProtectionGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteProtectionGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteProtectionGroupInput{}
	}

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

// DeleteProtectionGroup API operation for AWS Shield.
//
// Removes the specified protection group.
//
// 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 Shield's
// API operation DeleteProtectionGroup for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DeleteProtectionGroup
func (c *Shield) DeleteProtectionGroup(input *DeleteProtectionGroupInput) (*DeleteProtectionGroupOutput, error) {
	req, out := c.DeleteProtectionGroupRequest(input)
	return out, req.Send()
}

// DeleteProtectionGroupWithContext is the same as DeleteProtectionGroup with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteProtectionGroup 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 *Shield) DeleteProtectionGroupWithContext(ctx aws.Context, input *DeleteProtectionGroupInput, opts ...request.Option) (*DeleteProtectionGroupOutput, error) {
	req, out := c.DeleteProtectionGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteSubscription = "DeleteSubscription"

// DeleteSubscriptionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSubscription 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 DeleteSubscription for more information on using the DeleteSubscription
// 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 DeleteSubscriptionRequest method.
//    req, resp := client.DeleteSubscriptionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DeleteSubscription
//
// Deprecated: DeleteSubscription has been deprecated
func (c *Shield) DeleteSubscriptionRequest(input *DeleteSubscriptionInput) (req *request.Request, output *DeleteSubscriptionOutput) {
	if c.Client.Config.Logger != nil {
		c.Client.Config.Logger.Log("This operation, DeleteSubscription, has been deprecated")
	}
	op := &request.Operation{
		Name:       opDeleteSubscription,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteSubscriptionInput{}
	}

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

// DeleteSubscription API operation for AWS Shield.
//
// Removes AWS Shield Advanced from an account. AWS Shield Advanced requires
// a 1-year subscription commitment. You cannot delete a subscription prior
// to the completion of that commitment.
//
// 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 Shield's
// API operation DeleteSubscription for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * LockedSubscriptionException
//   You are trying to update a subscription that has not yet completed the 1-year
//   commitment. You can change the AutoRenew parameter during the last 30 days
//   of your subscription. This exception indicates that you are attempting to
//   change AutoRenew prior to that period.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DeleteSubscription
//
// Deprecated: DeleteSubscription has been deprecated
func (c *Shield) DeleteSubscription(input *DeleteSubscriptionInput) (*DeleteSubscriptionOutput, error) {
	req, out := c.DeleteSubscriptionRequest(input)
	return out, req.Send()
}

// DeleteSubscriptionWithContext is the same as DeleteSubscription with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteSubscription 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.
//
// Deprecated: DeleteSubscriptionWithContext has been deprecated
func (c *Shield) DeleteSubscriptionWithContext(ctx aws.Context, input *DeleteSubscriptionInput, opts ...request.Option) (*DeleteSubscriptionOutput, error) {
	req, out := c.DeleteSubscriptionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeAttack = "DescribeAttack"

// DescribeAttackRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAttack 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 DescribeAttack for more information on using the DescribeAttack
// 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 DescribeAttackRequest method.
//    req, resp := client.DescribeAttackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeAttack
func (c *Shield) DescribeAttackRequest(input *DescribeAttackInput) (req *request.Request, output *DescribeAttackOutput) {
	op := &request.Operation{
		Name:       opDescribeAttack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAttackInput{}
	}

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

// DescribeAttack API operation for AWS Shield.
//
// Describes the details of a DDoS attack.
//
// 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 Shield's
// API operation DescribeAttack for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * AccessDeniedException
//   Exception that indicates the specified AttackId does not exist, or the requester
//   does not have the appropriate permissions to access the AttackId.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeAttack
func (c *Shield) DescribeAttack(input *DescribeAttackInput) (*DescribeAttackOutput, error) {
	req, out := c.DescribeAttackRequest(input)
	return out, req.Send()
}

// DescribeAttackWithContext is the same as DescribeAttack with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeAttack 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 *Shield) DescribeAttackWithContext(ctx aws.Context, input *DescribeAttackInput, opts ...request.Option) (*DescribeAttackOutput, error) {
	req, out := c.DescribeAttackRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeAttackStatistics = "DescribeAttackStatistics"

// DescribeAttackStatisticsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAttackStatistics 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 DescribeAttackStatistics for more information on using the DescribeAttackStatistics
// 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 DescribeAttackStatisticsRequest method.
//    req, resp := client.DescribeAttackStatisticsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeAttackStatistics
func (c *Shield) DescribeAttackStatisticsRequest(input *DescribeAttackStatisticsInput) (req *request.Request, output *DescribeAttackStatisticsOutput) {
	op := &request.Operation{
		Name:       opDescribeAttackStatistics,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAttackStatisticsInput{}
	}

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

// DescribeAttackStatistics API operation for AWS Shield.
//
// Provides information about the number and type of attacks AWS Shield has
// detected in the last year for all resources that belong to your account,
// regardless of whether you've defined Shield protections for them. This operation
// is available to Shield customers as well as to Shield Advanced customers.
//
// The operation returns data for the time range of midnight UTC, one year ago,
// to midnight UTC, today. For example, if the current time is 2020-10-26 15:39:32
// PDT, equal to 2020-10-26 22:39:32 UTC, then the time range for the attack
// data returned is from 2019-10-26 00:00:00 UTC to 2020-10-26 00:00:00 UTC.
//
// The time range indicates the period covered by the attack statistics data
// items.
//
// 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 Shield's
// API operation DescribeAttackStatistics for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeAttackStatistics
func (c *Shield) DescribeAttackStatistics(input *DescribeAttackStatisticsInput) (*DescribeAttackStatisticsOutput, error) {
	req, out := c.DescribeAttackStatisticsRequest(input)
	return out, req.Send()
}

// DescribeAttackStatisticsWithContext is the same as DescribeAttackStatistics with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeAttackStatistics 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 *Shield) DescribeAttackStatisticsWithContext(ctx aws.Context, input *DescribeAttackStatisticsInput, opts ...request.Option) (*DescribeAttackStatisticsOutput, error) {
	req, out := c.DescribeAttackStatisticsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeDRTAccess = "DescribeDRTAccess"

// DescribeDRTAccessRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDRTAccess 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 DescribeDRTAccess for more information on using the DescribeDRTAccess
// 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 DescribeDRTAccessRequest method.
//    req, resp := client.DescribeDRTAccessRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeDRTAccess
func (c *Shield) DescribeDRTAccessRequest(input *DescribeDRTAccessInput) (req *request.Request, output *DescribeDRTAccessOutput) {
	op := &request.Operation{
		Name:       opDescribeDRTAccess,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDRTAccessInput{}
	}

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

// DescribeDRTAccess API operation for AWS Shield.
//
// Returns the current role and list of Amazon S3 log buckets used by the DDoS
// Response Team (DRT) to access your AWS account while assisting with attack
// mitigation.
//
// 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 Shield's
// API operation DescribeDRTAccess for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeDRTAccess
func (c *Shield) DescribeDRTAccess(input *DescribeDRTAccessInput) (*DescribeDRTAccessOutput, error) {
	req, out := c.DescribeDRTAccessRequest(input)
	return out, req.Send()
}

// DescribeDRTAccessWithContext is the same as DescribeDRTAccess with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeDRTAccess 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 *Shield) DescribeDRTAccessWithContext(ctx aws.Context, input *DescribeDRTAccessInput, opts ...request.Option) (*DescribeDRTAccessOutput, error) {
	req, out := c.DescribeDRTAccessRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeEmergencyContactSettings = "DescribeEmergencyContactSettings"

// DescribeEmergencyContactSettingsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeEmergencyContactSettings 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 DescribeEmergencyContactSettings for more information on using the DescribeEmergencyContactSettings
// 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 DescribeEmergencyContactSettingsRequest method.
//    req, resp := client.DescribeEmergencyContactSettingsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeEmergencyContactSettings
func (c *Shield) DescribeEmergencyContactSettingsRequest(input *DescribeEmergencyContactSettingsInput) (req *request.Request, output *DescribeEmergencyContactSettingsOutput) {
	op := &request.Operation{
		Name:       opDescribeEmergencyContactSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeEmergencyContactSettingsInput{}
	}

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

// DescribeEmergencyContactSettings API operation for AWS Shield.
//
// A list of email addresses and phone numbers that the DDoS Response Team (DRT)
// can use to contact you if you have proactive engagement enabled, for escalations
// to the DRT and to initiate proactive customer support.
//
// 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 Shield's
// API operation DescribeEmergencyContactSettings for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeEmergencyContactSettings
func (c *Shield) DescribeEmergencyContactSettings(input *DescribeEmergencyContactSettingsInput) (*DescribeEmergencyContactSettingsOutput, error) {
	req, out := c.DescribeEmergencyContactSettingsRequest(input)
	return out, req.Send()
}

// DescribeEmergencyContactSettingsWithContext is the same as DescribeEmergencyContactSettings with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeEmergencyContactSettings 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 *Shield) DescribeEmergencyContactSettingsWithContext(ctx aws.Context, input *DescribeEmergencyContactSettingsInput, opts ...request.Option) (*DescribeEmergencyContactSettingsOutput, error) {
	req, out := c.DescribeEmergencyContactSettingsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeProtection = "DescribeProtection"

// DescribeProtectionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeProtection 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 DescribeProtection for more information on using the DescribeProtection
// 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 DescribeProtectionRequest method.
//    req, resp := client.DescribeProtectionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeProtection
func (c *Shield) DescribeProtectionRequest(input *DescribeProtectionInput) (req *request.Request, output *DescribeProtectionOutput) {
	op := &request.Operation{
		Name:       opDescribeProtection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeProtectionInput{}
	}

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

// DescribeProtection API operation for AWS Shield.
//
// Lists the details of a Protection object.
//
// 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 Shield's
// API operation DescribeProtection for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeProtection
func (c *Shield) DescribeProtection(input *DescribeProtectionInput) (*DescribeProtectionOutput, error) {
	req, out := c.DescribeProtectionRequest(input)
	return out, req.Send()
}

// DescribeProtectionWithContext is the same as DescribeProtection with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeProtection 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 *Shield) DescribeProtectionWithContext(ctx aws.Context, input *DescribeProtectionInput, opts ...request.Option) (*DescribeProtectionOutput, error) {
	req, out := c.DescribeProtectionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeProtectionGroup = "DescribeProtectionGroup"

// DescribeProtectionGroupRequest generates a "aws/request.Request" representing the
// client's request for the DescribeProtectionGroup 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 DescribeProtectionGroup for more information on using the DescribeProtectionGroup
// 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 DescribeProtectionGroupRequest method.
//    req, resp := client.DescribeProtectionGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeProtectionGroup
func (c *Shield) DescribeProtectionGroupRequest(input *DescribeProtectionGroupInput) (req *request.Request, output *DescribeProtectionGroupOutput) {
	op := &request.Operation{
		Name:       opDescribeProtectionGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeProtectionGroupInput{}
	}

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

// DescribeProtectionGroup API operation for AWS Shield.
//
// Returns the specification for the specified protection group.
//
// 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 Shield's
// API operation DescribeProtectionGroup for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeProtectionGroup
func (c *Shield) DescribeProtectionGroup(input *DescribeProtectionGroupInput) (*DescribeProtectionGroupOutput, error) {
	req, out := c.DescribeProtectionGroupRequest(input)
	return out, req.Send()
}

// DescribeProtectionGroupWithContext is the same as DescribeProtectionGroup with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeProtectionGroup 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 *Shield) DescribeProtectionGroupWithContext(ctx aws.Context, input *DescribeProtectionGroupInput, opts ...request.Option) (*DescribeProtectionGroupOutput, error) {
	req, out := c.DescribeProtectionGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeSubscription = "DescribeSubscription"

// DescribeSubscriptionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeSubscription 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 DescribeSubscription for more information on using the DescribeSubscription
// 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 DescribeSubscriptionRequest method.
//    req, resp := client.DescribeSubscriptionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeSubscription
func (c *Shield) DescribeSubscriptionRequest(input *DescribeSubscriptionInput) (req *request.Request, output *DescribeSubscriptionOutput) {
	op := &request.Operation{
		Name:       opDescribeSubscription,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeSubscriptionInput{}
	}

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

// DescribeSubscription API operation for AWS Shield.
//
// Provides details about the AWS Shield Advanced subscription for an account.
//
// 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 Shield's
// API operation DescribeSubscription for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DescribeSubscription
func (c *Shield) DescribeSubscription(input *DescribeSubscriptionInput) (*DescribeSubscriptionOutput, error) {
	req, out := c.DescribeSubscriptionRequest(input)
	return out, req.Send()
}

// DescribeSubscriptionWithContext is the same as DescribeSubscription with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeSubscription 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 *Shield) DescribeSubscriptionWithContext(ctx aws.Context, input *DescribeSubscriptionInput, opts ...request.Option) (*DescribeSubscriptionOutput, error) {
	req, out := c.DescribeSubscriptionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDisableProactiveEngagement = "DisableProactiveEngagement"

// DisableProactiveEngagementRequest generates a "aws/request.Request" representing the
// client's request for the DisableProactiveEngagement 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 DisableProactiveEngagement for more information on using the DisableProactiveEngagement
// 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 DisableProactiveEngagementRequest method.
//    req, resp := client.DisableProactiveEngagementRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisableProactiveEngagement
func (c *Shield) DisableProactiveEngagementRequest(input *DisableProactiveEngagementInput) (req *request.Request, output *DisableProactiveEngagementOutput) {
	op := &request.Operation{
		Name:       opDisableProactiveEngagement,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisableProactiveEngagementInput{}
	}

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

// DisableProactiveEngagement API operation for AWS Shield.
//
// Removes authorization from the DDoS Response Team (DRT) to notify contacts
// about escalations to the DRT and to initiate proactive customer support.
//
// 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 Shield's
// API operation DisableProactiveEngagement for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisableProactiveEngagement
func (c *Shield) DisableProactiveEngagement(input *DisableProactiveEngagementInput) (*DisableProactiveEngagementOutput, error) {
	req, out := c.DisableProactiveEngagementRequest(input)
	return out, req.Send()
}

// DisableProactiveEngagementWithContext is the same as DisableProactiveEngagement with the addition of
// the ability to pass a context and additional request options.
//
// See DisableProactiveEngagement 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 *Shield) DisableProactiveEngagementWithContext(ctx aws.Context, input *DisableProactiveEngagementInput, opts ...request.Option) (*DisableProactiveEngagementOutput, error) {
	req, out := c.DisableProactiveEngagementRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDisassociateDRTLogBucket = "DisassociateDRTLogBucket"

// DisassociateDRTLogBucketRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateDRTLogBucket 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 DisassociateDRTLogBucket for more information on using the DisassociateDRTLogBucket
// 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 DisassociateDRTLogBucketRequest method.
//    req, resp := client.DisassociateDRTLogBucketRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisassociateDRTLogBucket
func (c *Shield) DisassociateDRTLogBucketRequest(input *DisassociateDRTLogBucketInput) (req *request.Request, output *DisassociateDRTLogBucketOutput) {
	op := &request.Operation{
		Name:       opDisassociateDRTLogBucket,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateDRTLogBucketInput{}
	}

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

// DisassociateDRTLogBucket API operation for AWS Shield.
//
// Removes the DDoS Response Team's (DRT) access to the specified Amazon S3
// bucket containing your AWS WAF logs.
//
// To make a DisassociateDRTLogBucket request, you must be subscribed to the
// Business Support plan (https://aws.amazon.com/premiumsupport/business-support/)
// or the Enterprise Support plan (https://aws.amazon.com/premiumsupport/enterprise-support/).
// However, if you are not subscribed to one of these support plans, but had
// been previously and had granted the DRT access to your account, you can submit
// a DisassociateDRTLogBucket request to remove this access.
//
// 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 Shield's
// API operation DisassociateDRTLogBucket for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * NoAssociatedRoleException
//   The ARN of the role that you specifed does not exist.
//
//   * AccessDeniedForDependencyException
//   In order to grant the necessary access to the DDoS Response Team (DRT), the
//   user submitting the request must have the iam:PassRole permission. This error
//   indicates the user did not have the appropriate permissions. For more information,
//   see Granting a User Permissions to Pass a Role to an AWS Service (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisassociateDRTLogBucket
func (c *Shield) DisassociateDRTLogBucket(input *DisassociateDRTLogBucketInput) (*DisassociateDRTLogBucketOutput, error) {
	req, out := c.DisassociateDRTLogBucketRequest(input)
	return out, req.Send()
}

// DisassociateDRTLogBucketWithContext is the same as DisassociateDRTLogBucket with the addition of
// the ability to pass a context and additional request options.
//
// See DisassociateDRTLogBucket 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 *Shield) DisassociateDRTLogBucketWithContext(ctx aws.Context, input *DisassociateDRTLogBucketInput, opts ...request.Option) (*DisassociateDRTLogBucketOutput, error) {
	req, out := c.DisassociateDRTLogBucketRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDisassociateDRTRole = "DisassociateDRTRole"

// DisassociateDRTRoleRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateDRTRole 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 DisassociateDRTRole for more information on using the DisassociateDRTRole
// 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 DisassociateDRTRoleRequest method.
//    req, resp := client.DisassociateDRTRoleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisassociateDRTRole
func (c *Shield) DisassociateDRTRoleRequest(input *DisassociateDRTRoleInput) (req *request.Request, output *DisassociateDRTRoleOutput) {
	op := &request.Operation{
		Name:       opDisassociateDRTRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateDRTRoleInput{}
	}

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

// DisassociateDRTRole API operation for AWS Shield.
//
// Removes the DDoS Response Team's (DRT) access to your AWS account.
//
// To make a DisassociateDRTRole request, you must be subscribed to the Business
// Support plan (https://aws.amazon.com/premiumsupport/business-support/) or
// the Enterprise Support plan (https://aws.amazon.com/premiumsupport/enterprise-support/).
// However, if you are not subscribed to one of these support plans, but had
// been previously and had granted the DRT access to your account, you can submit
// a DisassociateDRTRole request to remove this access.
//
// 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 Shield's
// API operation DisassociateDRTRole for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisassociateDRTRole
func (c *Shield) DisassociateDRTRole(input *DisassociateDRTRoleInput) (*DisassociateDRTRoleOutput, error) {
	req, out := c.DisassociateDRTRoleRequest(input)
	return out, req.Send()
}

// DisassociateDRTRoleWithContext is the same as DisassociateDRTRole with the addition of
// the ability to pass a context and additional request options.
//
// See DisassociateDRTRole 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 *Shield) DisassociateDRTRoleWithContext(ctx aws.Context, input *DisassociateDRTRoleInput, opts ...request.Option) (*DisassociateDRTRoleOutput, error) {
	req, out := c.DisassociateDRTRoleRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDisassociateHealthCheck = "DisassociateHealthCheck"

// DisassociateHealthCheckRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateHealthCheck 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 DisassociateHealthCheck for more information on using the DisassociateHealthCheck
// 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 DisassociateHealthCheckRequest method.
//    req, resp := client.DisassociateHealthCheckRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisassociateHealthCheck
func (c *Shield) DisassociateHealthCheckRequest(input *DisassociateHealthCheckInput) (req *request.Request, output *DisassociateHealthCheckOutput) {
	op := &request.Operation{
		Name:       opDisassociateHealthCheck,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateHealthCheckInput{}
	}

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

// DisassociateHealthCheck API operation for AWS Shield.
//
// Removes health-based detection from the Shield Advanced protection for a
// resource. Shield Advanced health-based detection uses the health of your
// AWS resource to improve responsiveness and accuracy in attack detection and
// mitigation.
//
// You define the health check in Route 53 and then associate or disassociate
// it with your Shield Advanced protection. For more information, see Shield
// Advanced Health-Based Detection (https://docs.aws.amazon.com/waf/latest/developerguide/ddos-overview.html#ddos-advanced-health-check-option)
// in the AWS WAF and AWS Shield 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 Shield's
// API operation DisassociateHealthCheck for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/DisassociateHealthCheck
func (c *Shield) DisassociateHealthCheck(input *DisassociateHealthCheckInput) (*DisassociateHealthCheckOutput, error) {
	req, out := c.DisassociateHealthCheckRequest(input)
	return out, req.Send()
}

// DisassociateHealthCheckWithContext is the same as DisassociateHealthCheck with the addition of
// the ability to pass a context and additional request options.
//
// See DisassociateHealthCheck 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 *Shield) DisassociateHealthCheckWithContext(ctx aws.Context, input *DisassociateHealthCheckInput, opts ...request.Option) (*DisassociateHealthCheckOutput, error) {
	req, out := c.DisassociateHealthCheckRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opEnableProactiveEngagement = "EnableProactiveEngagement"

// EnableProactiveEngagementRequest generates a "aws/request.Request" representing the
// client's request for the EnableProactiveEngagement 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 EnableProactiveEngagement for more information on using the EnableProactiveEngagement
// 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 EnableProactiveEngagementRequest method.
//    req, resp := client.EnableProactiveEngagementRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/EnableProactiveEngagement
func (c *Shield) EnableProactiveEngagementRequest(input *EnableProactiveEngagementInput) (req *request.Request, output *EnableProactiveEngagementOutput) {
	op := &request.Operation{
		Name:       opEnableProactiveEngagement,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &EnableProactiveEngagementInput{}
	}

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

// EnableProactiveEngagement API operation for AWS Shield.
//
// Authorizes the DDoS Response Team (DRT) to use email and phone to notify
// contacts about escalations to the DRT and to initiate proactive customer
// support.
//
// 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 Shield's
// API operation EnableProactiveEngagement for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/EnableProactiveEngagement
func (c *Shield) EnableProactiveEngagement(input *EnableProactiveEngagementInput) (*EnableProactiveEngagementOutput, error) {
	req, out := c.EnableProactiveEngagementRequest(input)
	return out, req.Send()
}

// EnableProactiveEngagementWithContext is the same as EnableProactiveEngagement with the addition of
// the ability to pass a context and additional request options.
//
// See EnableProactiveEngagement 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 *Shield) EnableProactiveEngagementWithContext(ctx aws.Context, input *EnableProactiveEngagementInput, opts ...request.Option) (*EnableProactiveEngagementOutput, error) {
	req, out := c.EnableProactiveEngagementRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetSubscriptionState = "GetSubscriptionState"

// GetSubscriptionStateRequest generates a "aws/request.Request" representing the
// client's request for the GetSubscriptionState 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 GetSubscriptionState for more information on using the GetSubscriptionState
// 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 GetSubscriptionStateRequest method.
//    req, resp := client.GetSubscriptionStateRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/GetSubscriptionState
func (c *Shield) GetSubscriptionStateRequest(input *GetSubscriptionStateInput) (req *request.Request, output *GetSubscriptionStateOutput) {
	op := &request.Operation{
		Name:       opGetSubscriptionState,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetSubscriptionStateInput{}
	}

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

// GetSubscriptionState API operation for AWS Shield.
//
// Returns the SubscriptionState, either Active or Inactive.
//
// 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 Shield's
// API operation GetSubscriptionState for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/GetSubscriptionState
func (c *Shield) GetSubscriptionState(input *GetSubscriptionStateInput) (*GetSubscriptionStateOutput, error) {
	req, out := c.GetSubscriptionStateRequest(input)
	return out, req.Send()
}

// GetSubscriptionStateWithContext is the same as GetSubscriptionState with the addition of
// the ability to pass a context and additional request options.
//
// See GetSubscriptionState 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 *Shield) GetSubscriptionStateWithContext(ctx aws.Context, input *GetSubscriptionStateInput, opts ...request.Option) (*GetSubscriptionStateOutput, error) {
	req, out := c.GetSubscriptionStateRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListAttacks = "ListAttacks"

// ListAttacksRequest generates a "aws/request.Request" representing the
// client's request for the ListAttacks 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 ListAttacks for more information on using the ListAttacks
// 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 ListAttacksRequest method.
//    req, resp := client.ListAttacksRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListAttacks
func (c *Shield) ListAttacksRequest(input *ListAttacksInput) (req *request.Request, output *ListAttacksOutput) {
	op := &request.Operation{
		Name:       opListAttacks,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAttacksInput{}
	}

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

// ListAttacks API operation for AWS Shield.
//
// Returns all ongoing DDoS attacks or all DDoS attacks during a specified time
// period.
//
// 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 Shield's
// API operation ListAttacks for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * InvalidOperationException
//   Exception that indicates that the operation would not cause any change to
//   occur.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListAttacks
func (c *Shield) ListAttacks(input *ListAttacksInput) (*ListAttacksOutput, error) {
	req, out := c.ListAttacksRequest(input)
	return out, req.Send()
}

// ListAttacksWithContext is the same as ListAttacks with the addition of
// the ability to pass a context and additional request options.
//
// See ListAttacks 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 *Shield) ListAttacksWithContext(ctx aws.Context, input *ListAttacksInput, opts ...request.Option) (*ListAttacksOutput, error) {
	req, out := c.ListAttacksRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListAttacksPages iterates over the pages of a ListAttacks operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAttacks method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//    // Example iterating over at most 3 pages of a ListAttacks operation.
//    pageNum := 0
//    err := client.ListAttacksPages(params,
//        func(page *shield.ListAttacksOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Shield) ListAttacksPages(input *ListAttacksInput, fn func(*ListAttacksOutput, bool) bool) error {
	return c.ListAttacksPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAttacksPagesWithContext same as ListAttacksPages except
// it takes a Context and allows setting request options on the pages.
//
// 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 *Shield) ListAttacksPagesWithContext(ctx aws.Context, input *ListAttacksInput, fn func(*ListAttacksOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAttacksInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAttacksRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListAttacksOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListProtectionGroups = "ListProtectionGroups"

// ListProtectionGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListProtectionGroups 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 ListProtectionGroups for more information on using the ListProtectionGroups
// 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 ListProtectionGroupsRequest method.
//    req, resp := client.ListProtectionGroupsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListProtectionGroups
func (c *Shield) ListProtectionGroupsRequest(input *ListProtectionGroupsInput) (req *request.Request, output *ListProtectionGroupsOutput) {
	op := &request.Operation{
		Name:       opListProtectionGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListProtectionGroupsInput{}
	}

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

// ListProtectionGroups API operation for AWS Shield.
//
// Retrieves the ProtectionGroup objects for the account.
//
// 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 Shield's
// API operation ListProtectionGroups for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * InvalidPaginationTokenException
//   Exception that indicates that the NextToken specified in the request is invalid.
//   Submit the request using the NextToken value that was returned in the response.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListProtectionGroups
func (c *Shield) ListProtectionGroups(input *ListProtectionGroupsInput) (*ListProtectionGroupsOutput, error) {
	req, out := c.ListProtectionGroupsRequest(input)
	return out, req.Send()
}

// ListProtectionGroupsWithContext is the same as ListProtectionGroups with the addition of
// the ability to pass a context and additional request options.
//
// See ListProtectionGroups 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 *Shield) ListProtectionGroupsWithContext(ctx aws.Context, input *ListProtectionGroupsInput, opts ...request.Option) (*ListProtectionGroupsOutput, error) {
	req, out := c.ListProtectionGroupsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListProtectionGroupsPages iterates over the pages of a ListProtectionGroups operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListProtectionGroups method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//    // Example iterating over at most 3 pages of a ListProtectionGroups operation.
//    pageNum := 0
//    err := client.ListProtectionGroupsPages(params,
//        func(page *shield.ListProtectionGroupsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Shield) ListProtectionGroupsPages(input *ListProtectionGroupsInput, fn func(*ListProtectionGroupsOutput, bool) bool) error {
	return c.ListProtectionGroupsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListProtectionGroupsPagesWithContext same as ListProtectionGroupsPages except
// it takes a Context and allows setting request options on the pages.
//
// 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 *Shield) ListProtectionGroupsPagesWithContext(ctx aws.Context, input *ListProtectionGroupsInput, fn func(*ListProtectionGroupsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListProtectionGroupsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListProtectionGroupsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListProtectionGroupsOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListProtections = "ListProtections"

// ListProtectionsRequest generates a "aws/request.Request" representing the
// client's request for the ListProtections 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 ListProtections for more information on using the ListProtections
// 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 ListProtectionsRequest method.
//    req, resp := client.ListProtectionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListProtections
func (c *Shield) ListProtectionsRequest(input *ListProtectionsInput) (req *request.Request, output *ListProtectionsOutput) {
	op := &request.Operation{
		Name:       opListProtections,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListProtectionsInput{}
	}

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

// ListProtections API operation for AWS Shield.
//
// Lists all Protection objects for the account.
//
// 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 Shield's
// API operation ListProtections for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * InvalidPaginationTokenException
//   Exception that indicates that the NextToken specified in the request is invalid.
//   Submit the request using the NextToken value that was returned in the response.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListProtections
func (c *Shield) ListProtections(input *ListProtectionsInput) (*ListProtectionsOutput, error) {
	req, out := c.ListProtectionsRequest(input)
	return out, req.Send()
}

// ListProtectionsWithContext is the same as ListProtections with the addition of
// the ability to pass a context and additional request options.
//
// See ListProtections 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 *Shield) ListProtectionsWithContext(ctx aws.Context, input *ListProtectionsInput, opts ...request.Option) (*ListProtectionsOutput, error) {
	req, out := c.ListProtectionsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListProtectionsPages iterates over the pages of a ListProtections operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListProtections method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//    // Example iterating over at most 3 pages of a ListProtections operation.
//    pageNum := 0
//    err := client.ListProtectionsPages(params,
//        func(page *shield.ListProtectionsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Shield) ListProtectionsPages(input *ListProtectionsInput, fn func(*ListProtectionsOutput, bool) bool) error {
	return c.ListProtectionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListProtectionsPagesWithContext same as ListProtectionsPages except
// it takes a Context and allows setting request options on the pages.
//
// 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 *Shield) ListProtectionsPagesWithContext(ctx aws.Context, input *ListProtectionsInput, fn func(*ListProtectionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListProtectionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListProtectionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListProtectionsOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListResourcesInProtectionGroup = "ListResourcesInProtectionGroup"

// ListResourcesInProtectionGroupRequest generates a "aws/request.Request" representing the
// client's request for the ListResourcesInProtectionGroup 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 ListResourcesInProtectionGroup for more information on using the ListResourcesInProtectionGroup
// 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 ListResourcesInProtectionGroupRequest method.
//    req, resp := client.ListResourcesInProtectionGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListResourcesInProtectionGroup
func (c *Shield) ListResourcesInProtectionGroupRequest(input *ListResourcesInProtectionGroupInput) (req *request.Request, output *ListResourcesInProtectionGroupOutput) {
	op := &request.Operation{
		Name:       opListResourcesInProtectionGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListResourcesInProtectionGroupInput{}
	}

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

// ListResourcesInProtectionGroup API operation for AWS Shield.
//
// Retrieves the resources that are included in the protection group.
//
// 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 Shield's
// API operation ListResourcesInProtectionGroup for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * InvalidPaginationTokenException
//   Exception that indicates that the NextToken specified in the request is invalid.
//   Submit the request using the NextToken value that was returned in the response.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/ListResourcesInProtectionGroup
func (c *Shield) ListResourcesInProtectionGroup(input *ListResourcesInProtectionGroupInput) (*ListResourcesInProtectionGroupOutput, error) {
	req, out := c.ListResourcesInProtectionGroupRequest(input)
	return out, req.Send()
}

// ListResourcesInProtectionGroupWithContext is the same as ListResourcesInProtectionGroup with the addition of
// the ability to pass a context and additional request options.
//
// See ListResourcesInProtectionGroup 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 *Shield) ListResourcesInProtectionGroupWithContext(ctx aws.Context, input *ListResourcesInProtectionGroupInput, opts ...request.Option) (*ListResourcesInProtectionGroupOutput, error) {
	req, out := c.ListResourcesInProtectionGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListResourcesInProtectionGroupPages iterates over the pages of a ListResourcesInProtectionGroup operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListResourcesInProtectionGroup method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//    // Example iterating over at most 3 pages of a ListResourcesInProtectionGroup operation.
//    pageNum := 0
//    err := client.ListResourcesInProtectionGroupPages(params,
//        func(page *shield.ListResourcesInProtectionGroupOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Shield) ListResourcesInProtectionGroupPages(input *ListResourcesInProtectionGroupInput, fn func(*ListResourcesInProtectionGroupOutput, bool) bool) error {
	return c.ListResourcesInProtectionGroupPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListResourcesInProtectionGroupPagesWithContext same as ListResourcesInProtectionGroupPages except
// it takes a Context and allows setting request options on the pages.
//
// 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 *Shield) ListResourcesInProtectionGroupPagesWithContext(ctx aws.Context, input *ListResourcesInProtectionGroupInput, fn func(*ListResourcesInProtectionGroupOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListResourcesInProtectionGroupInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListResourcesInProtectionGroupRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListResourcesInProtectionGroupOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opUpdateEmergencyContactSettings = "UpdateEmergencyContactSettings"

// UpdateEmergencyContactSettingsRequest generates a "aws/request.Request" representing the
// client's request for the UpdateEmergencyContactSettings 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 UpdateEmergencyContactSettings for more information on using the UpdateEmergencyContactSettings
// 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 UpdateEmergencyContactSettingsRequest method.
//    req, resp := client.UpdateEmergencyContactSettingsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/UpdateEmergencyContactSettings
func (c *Shield) UpdateEmergencyContactSettingsRequest(input *UpdateEmergencyContactSettingsInput) (req *request.Request, output *UpdateEmergencyContactSettingsOutput) {
	op := &request.Operation{
		Name:       opUpdateEmergencyContactSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateEmergencyContactSettingsInput{}
	}

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

// UpdateEmergencyContactSettings API operation for AWS Shield.
//
// Updates the details of the list of email addresses and phone numbers that
// the DDoS Response Team (DRT) can use to contact you if you have proactive
// engagement enabled, for escalations to the DRT and to initiate proactive
// customer support.
//
// 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 Shield's
// API operation UpdateEmergencyContactSettings for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/UpdateEmergencyContactSettings
func (c *Shield) UpdateEmergencyContactSettings(input *UpdateEmergencyContactSettingsInput) (*UpdateEmergencyContactSettingsOutput, error) {
	req, out := c.UpdateEmergencyContactSettingsRequest(input)
	return out, req.Send()
}

// UpdateEmergencyContactSettingsWithContext is the same as UpdateEmergencyContactSettings with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateEmergencyContactSettings 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 *Shield) UpdateEmergencyContactSettingsWithContext(ctx aws.Context, input *UpdateEmergencyContactSettingsInput, opts ...request.Option) (*UpdateEmergencyContactSettingsOutput, error) {
	req, out := c.UpdateEmergencyContactSettingsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateProtectionGroup = "UpdateProtectionGroup"

// UpdateProtectionGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateProtectionGroup 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 UpdateProtectionGroup for more information on using the UpdateProtectionGroup
// 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 UpdateProtectionGroupRequest method.
//    req, resp := client.UpdateProtectionGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/UpdateProtectionGroup
func (c *Shield) UpdateProtectionGroupRequest(input *UpdateProtectionGroupInput) (req *request.Request, output *UpdateProtectionGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateProtectionGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateProtectionGroupInput{}
	}

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

// UpdateProtectionGroup API operation for AWS Shield.
//
// Updates an existing protection group. A protection group is a grouping of
// protected resources so they can be handled as a collective. This resource
// grouping improves the accuracy of detection and reduces false positives.
//
// 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 Shield's
// API operation UpdateProtectionGroup for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/UpdateProtectionGroup
func (c *Shield) UpdateProtectionGroup(input *UpdateProtectionGroupInput) (*UpdateProtectionGroupOutput, error) {
	req, out := c.UpdateProtectionGroupRequest(input)
	return out, req.Send()
}

// UpdateProtectionGroupWithContext is the same as UpdateProtectionGroup with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateProtectionGroup 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 *Shield) UpdateProtectionGroupWithContext(ctx aws.Context, input *UpdateProtectionGroupInput, opts ...request.Option) (*UpdateProtectionGroupOutput, error) {
	req, out := c.UpdateProtectionGroupRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateSubscription = "UpdateSubscription"

// UpdateSubscriptionRequest generates a "aws/request.Request" representing the
// client's request for the UpdateSubscription 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 UpdateSubscription for more information on using the UpdateSubscription
// 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 UpdateSubscriptionRequest method.
//    req, resp := client.UpdateSubscriptionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/UpdateSubscription
func (c *Shield) UpdateSubscriptionRequest(input *UpdateSubscriptionInput) (req *request.Request, output *UpdateSubscriptionOutput) {
	op := &request.Operation{
		Name:       opUpdateSubscription,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateSubscriptionInput{}
	}

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

// UpdateSubscription API operation for AWS Shield.
//
// Updates the details of an existing subscription. Only enter values for parameters
// you want to change. Empty parameters are not updated.
//
// 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 Shield's
// API operation UpdateSubscription for usage and error information.
//
// Returned Error Types:
//   * InternalErrorException
//   Exception that indicates that a problem occurred with the service infrastructure.
//   You can retry the request.
//
//   * LockedSubscriptionException
//   You are trying to update a subscription that has not yet completed the 1-year
//   commitment. You can change the AutoRenew parameter during the last 30 days
//   of your subscription. This exception indicates that you are attempting to
//   change AutoRenew prior to that period.
//
//   * ResourceNotFoundException
//   Exception indicating the specified resource does not exist. If available,
//   this exception includes details in additional properties.
//
//   * InvalidParameterException
//   Exception that indicates that the parameters passed to the API are invalid.
//   If available, this exception includes details in additional properties.
//
//   * OptimisticLockException
//   Exception that indicates that the resource state has been modified by another
//   client. Retrieve the resource and then retry your request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/shield-2016-06-02/UpdateSubscription
func (c *Shield) UpdateSubscription(input *UpdateSubscriptionInput) (*UpdateSubscriptionOutput, error) {
	req, out := c.UpdateSubscriptionRequest(input)
	return out, req.Send()
}

// UpdateSubscriptionWithContext is the same as UpdateSubscription with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateSubscription 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 *Shield) UpdateSubscriptionWithContext(ctx aws.Context, input *UpdateSubscriptionInput, opts ...request.Option) (*UpdateSubscriptionOutput, error) {
	req, out := c.UpdateSubscriptionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// Exception that indicates the specified AttackId does not exist, or the requester
// does not have the appropriate permissions to access the AttackId.
type AccessDeniedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorAccessDeniedException(v protocol.ResponseMetadata) error {
	return &AccessDeniedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *AccessDeniedException) Code() string {
	return "AccessDeniedException"
}

// Message returns the exception's message.
func (s *AccessDeniedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *AccessDeniedException) OrigErr() error {
	return nil
}

func (s *AccessDeniedException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *AccessDeniedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *AccessDeniedException) RequestID() string {
	return s.RespMetadata.RequestID
}

// In order to grant the necessary access to the DDoS Response Team (DRT), the
// user submitting the request must have the iam:PassRole permission. This error
// indicates the user did not have the appropriate permissions. For more information,
// see Granting a User Permissions to Pass a Role to an AWS Service (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).
type AccessDeniedForDependencyException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorAccessDeniedForDependencyException(v protocol.ResponseMetadata) error {
	return &AccessDeniedForDependencyException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *AccessDeniedForDependencyException) Code() string {
	return "AccessDeniedForDependencyException"
}

// Message returns the exception's message.
func (s *AccessDeniedForDependencyException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *AccessDeniedForDependencyException) OrigErr() error {
	return nil
}

func (s *AccessDeniedForDependencyException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *AccessDeniedForDependencyException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *AccessDeniedForDependencyException) RequestID() string {
	return s.RespMetadata.RequestID
}

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

	// The Amazon S3 bucket that contains your AWS WAF logs.
	//
	// LogBucket is a required field
	LogBucket *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetLogBucket sets the LogBucket field's value.
func (s *AssociateDRTLogBucketInput) SetLogBucket(v string) *AssociateDRTLogBucketInput {
	s.LogBucket = &v
	return s
}

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

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

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

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

	// The Amazon Resource Name (ARN) of the role the DRT will use to access your
	// AWS account.
	//
	// Prior to making the AssociateDRTRole request, you must attach the AWSShieldDRTAccessPolicy
	// (https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSShieldDRTAccessPolicy)
	// managed policy to this role. For more information see Attaching and Detaching
	// IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html).
	//
	// RoleArn is a required field
	RoleArn *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetRoleArn sets the RoleArn field's value.
func (s *AssociateDRTRoleInput) SetRoleArn(v string) *AssociateDRTRoleInput {
	s.RoleArn = &v
	return s
}

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

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

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

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

	// The Amazon Resource Name (ARN) of the health check to associate with the
	// protection.
	//
	// HealthCheckArn is a required field
	HealthCheckArn *string `min:"1" type:"string" required:"true"`

	// The unique identifier (ID) for the Protection object to add the health check
	// association to.
	//
	// ProtectionId is a required field
	ProtectionId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetHealthCheckArn sets the HealthCheckArn field's value.
func (s *AssociateHealthCheckInput) SetHealthCheckArn(v string) *AssociateHealthCheckInput {
	s.HealthCheckArn = &v
	return s
}

// SetProtectionId sets the ProtectionId field's value.
func (s *AssociateHealthCheckInput) SetProtectionId(v string) *AssociateHealthCheckInput {
	s.ProtectionId = &v
	return s
}

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

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

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

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

	// A list of email addresses and phone numbers that the DDoS Response Team (DRT)
	// can use to contact you for escalations to the DRT and to initiate proactive
	// customer support.
	//
	// To enable proactive engagement, the contact list must include at least one
	// phone number.
	//
	// The contacts that you provide here replace any contacts that were already
	// defined. If you already have contacts defined and want to use them, retrieve
	// the list using DescribeEmergencyContactSettings and then provide it here.
	//
	// EmergencyContactList is a required field
	EmergencyContactList []*EmergencyContact `type:"list" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *AssociateProactiveEngagementDetailsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AssociateProactiveEngagementDetailsInput"}
	if s.EmergencyContactList == nil {
		invalidParams.Add(request.NewErrParamRequired("EmergencyContactList"))
	}
	if s.EmergencyContactList != nil {
		for i, v := range s.EmergencyContactList {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "EmergencyContactList", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetEmergencyContactList sets the EmergencyContactList field's value.
func (s *AssociateProactiveEngagementDetailsInput) SetEmergencyContactList(v []*EmergencyContact) *AssociateProactiveEngagementDetailsInput {
	s.EmergencyContactList = v
	return s
}

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

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

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

// The details of a DDoS attack.
type AttackDetail struct {
	_ struct{} `type:"structure"`

	// List of counters that describe the attack for the specified time period.
	AttackCounters []*SummarizedCounter `type:"list"`

	// The unique identifier (ID) of the attack.
	AttackId *string `min:"1" type:"string"`

	// The array of AttackProperty objects.
	AttackProperties []*AttackProperty `type:"list"`

	// The time the attack ended, in Unix time in seconds. For more information
	// see timestamp (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	EndTime *time.Time `type:"timestamp"`

	// List of mitigation actions taken for the attack.
	Mitigations []*Mitigation `type:"list"`

	// The ARN (Amazon Resource Name) of the resource that was attacked.
	ResourceArn *string `min:"1" type:"string"`

	// The time the attack started, in Unix time in seconds. For more information
	// see timestamp (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	StartTime *time.Time `type:"timestamp"`

	// If applicable, additional detail about the resource being attacked, for example,
	// IP address or URL.
	SubResources []*SubResourceSummary `type:"list"`
}

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

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

// SetAttackCounters sets the AttackCounters field's value.
func (s *AttackDetail) SetAttackCounters(v []*SummarizedCounter) *AttackDetail {
	s.AttackCounters = v
	return s
}

// SetAttackId sets the AttackId field's value.
func (s *AttackDetail) SetAttackId(v string) *AttackDetail {
	s.AttackId = &v
	return s
}

// SetAttackProperties sets the AttackProperties field's value.
func (s *AttackDetail) SetAttackProperties(v []*AttackProperty) *AttackDetail {
	s.AttackProperties = v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *AttackDetail) SetEndTime(v time.Time) *AttackDetail {
	s.EndTime = &v
	return s
}

// SetMitigations sets the Mitigations field's value.
func (s *AttackDetail) SetMitigations(v []*Mitigation) *AttackDetail {
	s.Mitigations = v
	return s
}

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

// SetStartTime sets the StartTime field's value.
func (s *AttackDetail) SetStartTime(v time.Time) *AttackDetail {
	s.StartTime = &v
	return s
}

// SetSubResources sets the SubResources field's value.
func (s *AttackDetail) SetSubResources(v []*SubResourceSummary) *AttackDetail {
	s.SubResources = v
	return s
}

// Details of the described attack.
type AttackProperty struct {
	_ struct{} `type:"structure"`

	// The type of distributed denial of service (DDoS) event that was observed.
	// NETWORK indicates layer 3 and layer 4 events and APPLICATION indicates layer
	// 7 events.
	AttackLayer *string `type:"string" enum:"AttackLayer"`

	// Defines the DDoS attack property information that is provided. The WORDPRESS_PINGBACK_REFLECTOR
	// and WORDPRESS_PINGBACK_SOURCE values are valid only for WordPress reflective
	// pingback DDoS attacks.
	AttackPropertyIdentifier *string `type:"string" enum:"AttackPropertyIdentifier"`

	// The array of contributor objects that includes the top five contributors
	// to an attack.
	TopContributors []*Contributor `type:"list"`

	// The total contributions made to this attack by all contributors, not just
	// the five listed in the TopContributors list.
	Total *int64 `type:"long"`

	// The unit of the Value of the contributions.
	Unit *string `type:"string" enum:"Unit"`
}

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

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

// SetAttackLayer sets the AttackLayer field's value.
func (s *AttackProperty) SetAttackLayer(v string) *AttackProperty {
	s.AttackLayer = &v
	return s
}

// SetAttackPropertyIdentifier sets the AttackPropertyIdentifier field's value.
func (s *AttackProperty) SetAttackPropertyIdentifier(v string) *AttackProperty {
	s.AttackPropertyIdentifier = &v
	return s
}

// SetTopContributors sets the TopContributors field's value.
func (s *AttackProperty) SetTopContributors(v []*Contributor) *AttackProperty {
	s.TopContributors = v
	return s
}

// SetTotal sets the Total field's value.
func (s *AttackProperty) SetTotal(v int64) *AttackProperty {
	s.Total = &v
	return s
}

// SetUnit sets the Unit field's value.
func (s *AttackProperty) SetUnit(v string) *AttackProperty {
	s.Unit = &v
	return s
}

// A single attack statistics data record. This is returned by DescribeAttackStatistics
// along with a time range indicating the time period that the attack statistics
// apply to.
type AttackStatisticsDataItem struct {
	_ struct{} `type:"structure"`

	// The number of attacks detected during the time period. This is always present,
	// but might be zero.
	//
	// AttackCount is a required field
	AttackCount *int64 `type:"long" required:"true"`

	// Information about the volume of attacks during the time period. If the accompanying
	// AttackCount is zero, this setting might be empty.
	AttackVolume *AttackVolume `type:"structure"`
}

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

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

// SetAttackCount sets the AttackCount field's value.
func (s *AttackStatisticsDataItem) SetAttackCount(v int64) *AttackStatisticsDataItem {
	s.AttackCount = &v
	return s
}

// SetAttackVolume sets the AttackVolume field's value.
func (s *AttackStatisticsDataItem) SetAttackVolume(v *AttackVolume) *AttackStatisticsDataItem {
	s.AttackVolume = v
	return s
}

// Summarizes all DDoS attacks for a specified time period.
type AttackSummary struct {
	_ struct{} `type:"structure"`

	// The unique identifier (ID) of the attack.
	AttackId *string `type:"string"`

	// The list of attacks for a specified time period.
	AttackVectors []*AttackVectorDescription `type:"list"`

	// The end time of the attack, in Unix time in seconds. For more information
	// see timestamp (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	EndTime *time.Time `type:"timestamp"`

	// The ARN (Amazon Resource Name) of the resource that was attacked.
	ResourceArn *string `type:"string"`

	// The start time of the attack, in Unix time in seconds. For more information
	// see timestamp (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	StartTime *time.Time `type:"timestamp"`
}

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

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

// SetAttackId sets the AttackId field's value.
func (s *AttackSummary) SetAttackId(v string) *AttackSummary {
	s.AttackId = &v
	return s
}

// SetAttackVectors sets the AttackVectors field's value.
func (s *AttackSummary) SetAttackVectors(v []*AttackVectorDescription) *AttackSummary {
	s.AttackVectors = v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *AttackSummary) SetEndTime(v time.Time) *AttackSummary {
	s.EndTime = &v
	return s
}

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

// SetStartTime sets the StartTime field's value.
func (s *AttackSummary) SetStartTime(v time.Time) *AttackSummary {
	s.StartTime = &v
	return s
}

// Describes the attack.
type AttackVectorDescription struct {
	_ struct{} `type:"structure"`

	// The attack type. Valid values:
	//
	//    * UDP_TRAFFIC
	//
	//    * UDP_FRAGMENT
	//
	//    * GENERIC_UDP_REFLECTION
	//
	//    * DNS_REFLECTION
	//
	//    * NTP_REFLECTION
	//
	//    * CHARGEN_REFLECTION
	//
	//    * SSDP_REFLECTION
	//
	//    * PORT_MAPPER
	//
	//    * RIP_REFLECTION
	//
	//    * SNMP_REFLECTION
	//
	//    * MSSQL_REFLECTION
	//
	//    * NET_BIOS_REFLECTION
	//
	//    * SYN_FLOOD
	//
	//    * ACK_FLOOD
	//
	//    * REQUEST_FLOOD
	//
	//    * HTTP_REFLECTION
	//
	//    * UDS_REFLECTION
	//
	//    * MEMCACHED_REFLECTION
	//
	// VectorType is a required field
	VectorType *string `type:"string" required:"true"`
}

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

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

// SetVectorType sets the VectorType field's value.
func (s *AttackVectorDescription) SetVectorType(v string) *AttackVectorDescription {
	s.VectorType = &v
	return s
}

// Information about the volume of attacks during the time period, included
// in an AttackStatisticsDataItem. If the accompanying AttackCount in the statistics
// object is zero, this setting might be empty.
type AttackVolume struct {
	_ struct{} `type:"structure"`

	// A statistics object that uses bits per second as the unit. This is included
	// for network level attacks.
	BitsPerSecond *AttackVolumeStatistics `type:"structure"`

	// A statistics object that uses packets per second as the unit. This is included
	// for network level attacks.
	PacketsPerSecond *AttackVolumeStatistics `type:"structure"`

	// A statistics object that uses requests per second as the unit. This is included
	// for application level attacks, and is only available for accounts that are
	// subscribed to Shield Advanced.
	RequestsPerSecond *AttackVolumeStatistics `type:"structure"`
}

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

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

// SetBitsPerSecond sets the BitsPerSecond field's value.
func (s *AttackVolume) SetBitsPerSecond(v *AttackVolumeStatistics) *AttackVolume {
	s.BitsPerSecond = v
	return s
}

// SetPacketsPerSecond sets the PacketsPerSecond field's value.
func (s *AttackVolume) SetPacketsPerSecond(v *AttackVolumeStatistics) *AttackVolume {
	s.PacketsPerSecond = v
	return s
}

// SetRequestsPerSecond sets the RequestsPerSecond field's value.
func (s *AttackVolume) SetRequestsPerSecond(v *AttackVolumeStatistics) *AttackVolume {
	s.RequestsPerSecond = v
	return s
}

// Statistics objects for the various data types in AttackVolume.
type AttackVolumeStatistics struct {
	_ struct{} `type:"structure"`

	// The maximum attack volume observed for the given unit.
	//
	// Max is a required field
	Max *float64 `type:"double" required:"true"`
}

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

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

// SetMax sets the Max field's value.
func (s *AttackVolumeStatistics) SetMax(v float64) *AttackVolumeStatistics {
	s.Max = &v
	return s
}

// A contributor to the attack and their contribution.
type Contributor struct {
	_ struct{} `type:"structure"`

	// The name of the contributor. This is dependent on the AttackPropertyIdentifier.
	// For example, if the AttackPropertyIdentifier is SOURCE_COUNTRY, the Name
	// could be United States.
	Name *string `type:"string"`

	// The contribution of this contributor expressed in Protection units. For example
	// 10,000.
	Value *int64 `type:"long"`
}

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

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

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

// SetValue sets the Value field's value.
func (s *Contributor) SetValue(v int64) *Contributor {
	s.Value = &v
	return s
}

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

	// Defines how AWS Shield combines resource data for the group in order to detect,
	// mitigate, and report events.
	//
	//    * Sum - Use the total traffic across the group. This is a good choice
	//    for most cases. Examples include Elastic IP addresses for EC2 instances
	//    that scale manually or automatically.
	//
	//    * Mean - Use the average of the traffic across the group. This is a good
	//    choice for resources that share traffic uniformly. Examples include accelerators
	//    and load balancers.
	//
	//    * Max - Use the highest traffic from each resource. This is useful for
	//    resources that don't share traffic and for resources that share that traffic
	//    in a non-uniform way. Examples include CloudFront distributions and origin
	//    resources for CloudFront distributions.
	//
	// Aggregation is a required field
	Aggregation *string `type:"string" required:"true" enum:"ProtectionGroupAggregation"`

	// The Amazon Resource Names (ARNs) of the resources to include in the protection
	// group. You must set this when you set Pattern to ARBITRARY and you must not
	// set it for any other Pattern setting.
	Members []*string `type:"list"`

	// The criteria to use to choose the protected resources for inclusion in the
	// group. You can include all resources that have protections, provide a list
	// of resource Amazon Resource Names (ARNs), or include all resources of a specified
	// resource type.
	//
	// Pattern is a required field
	Pattern *string `type:"string" required:"true" enum:"ProtectionGroupPattern"`

	// The name of the protection group. You use this to identify the protection
	// group in lists and to manage the protection group, for example to update,
	// delete, or describe it.
	//
	// ProtectionGroupId is a required field
	ProtectionGroupId *string `min:"1" type:"string" required:"true"`

	// The resource type to include in the protection group. All protected resources
	// of this type are included in the protection group. Newly protected resources
	// of this type are automatically added to the group. You must set this when
	// you set Pattern to BY_RESOURCE_TYPE and you must not set it for any other
	// Pattern setting.
	ResourceType *string `type:"string" enum:"ProtectedResourceType"`
}

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

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

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

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

// SetAggregation sets the Aggregation field's value.
func (s *CreateProtectionGroupInput) SetAggregation(v string) *CreateProtectionGroupInput {
	s.Aggregation = &v
	return s
}

// SetMembers sets the Members field's value.
func (s *CreateProtectionGroupInput) SetMembers(v []*string) *CreateProtectionGroupInput {
	s.Members = v
	return s
}

// SetPattern sets the Pattern field's value.
func (s *CreateProtectionGroupInput) SetPattern(v string) *CreateProtectionGroupInput {
	s.Pattern = &v
	return s
}

// SetProtectionGroupId sets the ProtectionGroupId field's value.
func (s *CreateProtectionGroupInput) SetProtectionGroupId(v string) *CreateProtectionGroupInput {
	s.ProtectionGroupId = &v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *CreateProtectionGroupInput) SetResourceType(v string) *CreateProtectionGroupInput {
	s.ResourceType = &v
	return s
}

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

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

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

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

	// Friendly name for the Protection you are creating.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The ARN (Amazon Resource Name) of the resource to be protected.
	//
	// The ARN should be in one of the following formats:
	//
	//    * For an Application Load Balancer: arn:aws:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id
	//
	//    * For an Elastic Load Balancer (Classic Load Balancer): arn:aws:elasticloadbalancing:region:account-id:loadbalancer/load-balancer-name
	//
	//    * For an AWS CloudFront distribution: arn:aws:cloudfront::account-id:distribution/distribution-id
	//
	//    * For an AWS Global Accelerator accelerator: arn:aws:globalaccelerator::account-id:accelerator/accelerator-id
	//
	//    * For Amazon Route 53: arn:aws:route53:::hostedzone/hosted-zone-id
	//
	//    * For an Elastic IP address: arn:aws:ec2:region:account-id:eip-allocation/allocation-id
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateProtectionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateProtectionInput"}
	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.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
}

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

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

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

	// The unique identifier (ID) for the Protection object that is created.
	ProtectionId *string `min:"1" type:"string"`
}

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

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

// SetProtectionId sets the ProtectionId field's value.
func (s *CreateProtectionOutput) SetProtectionId(v string) *CreateProtectionOutput {
	s.ProtectionId = &v
	return s
}

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

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

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

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

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

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

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

	// The name of the protection group. You use this to identify the protection
	// group in lists and to manage the protection group, for example to update,
	// delete, or describe it.
	//
	// ProtectionGroupId is a required field
	ProtectionGroupId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetProtectionGroupId sets the ProtectionGroupId field's value.
func (s *DeleteProtectionGroupInput) SetProtectionGroupId(v string) *DeleteProtectionGroupInput {
	s.ProtectionGroupId = &v
	return s
}

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

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

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

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

	// The unique identifier (ID) for the Protection object to be deleted.
	//
	// ProtectionId is a required field
	ProtectionId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetProtectionId sets the ProtectionId field's value.
func (s *DeleteProtectionInput) SetProtectionId(v string) *DeleteProtectionInput {
	s.ProtectionId = &v
	return s
}

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

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

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

// Deprecated: DeleteSubscriptionInput has been deprecated
type DeleteSubscriptionInput struct {
	_ struct{} `deprecated:"true" type:"structure"`
}

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

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

// Deprecated: DeleteSubscriptionOutput has been deprecated
type DeleteSubscriptionOutput struct {
	_ struct{} `deprecated:"true" type:"structure"`
}

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

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

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

	// The unique identifier (ID) for the attack that to be described.
	//
	// AttackId is a required field
	AttackId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetAttackId sets the AttackId field's value.
func (s *DescribeAttackInput) SetAttackId(v string) *DescribeAttackInput {
	s.AttackId = &v
	return s
}

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

	// The attack that is described.
	Attack *AttackDetail `type:"structure"`
}

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

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

// SetAttack sets the Attack field's value.
func (s *DescribeAttackOutput) SetAttack(v *AttackDetail) *DescribeAttackOutput {
	s.Attack = v
	return s
}

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

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

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

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

	// The data that describes the attacks detected during the time period.
	//
	// DataItems is a required field
	DataItems []*AttackStatisticsDataItem `type:"list" required:"true"`

	// The time range.
	//
	// TimeRange is a required field
	TimeRange *TimeRange `type:"structure" required:"true"`
}

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

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

// SetDataItems sets the DataItems field's value.
func (s *DescribeAttackStatisticsOutput) SetDataItems(v []*AttackStatisticsDataItem) *DescribeAttackStatisticsOutput {
	s.DataItems = v
	return s
}

// SetTimeRange sets the TimeRange field's value.
func (s *DescribeAttackStatisticsOutput) SetTimeRange(v *TimeRange) *DescribeAttackStatisticsOutput {
	s.TimeRange = v
	return s
}

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

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

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

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

	// The list of Amazon S3 buckets accessed by the DRT.
	LogBucketList []*string `type:"list"`

	// The Amazon Resource Name (ARN) of the role the DRT used to access your AWS
	// account.
	RoleArn *string `min:"1" type:"string"`
}

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

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

// SetLogBucketList sets the LogBucketList field's value.
func (s *DescribeDRTAccessOutput) SetLogBucketList(v []*string) *DescribeDRTAccessOutput {
	s.LogBucketList = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DescribeDRTAccessOutput) SetRoleArn(v string) *DescribeDRTAccessOutput {
	s.RoleArn = &v
	return s
}

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

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

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

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

	// A list of email addresses and phone numbers that the DDoS Response Team (DRT)
	// can use to contact you if you have proactive engagement enabled, for escalations
	// to the DRT and to initiate proactive customer support.
	EmergencyContactList []*EmergencyContact `type:"list"`
}

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

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

// SetEmergencyContactList sets the EmergencyContactList field's value.
func (s *DescribeEmergencyContactSettingsOutput) SetEmergencyContactList(v []*EmergencyContact) *DescribeEmergencyContactSettingsOutput {
	s.EmergencyContactList = v
	return s
}

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

	// The name of the protection group. You use this to identify the protection
	// group in lists and to manage the protection group, for example to update,
	// delete, or describe it.
	//
	// ProtectionGroupId is a required field
	ProtectionGroupId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetProtectionGroupId sets the ProtectionGroupId field's value.
func (s *DescribeProtectionGroupInput) SetProtectionGroupId(v string) *DescribeProtectionGroupInput {
	s.ProtectionGroupId = &v
	return s
}

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

	// A grouping of protected resources that you and AWS Shield Advanced can monitor
	// as a collective. This resource grouping improves the accuracy of detection
	// and reduces false positives.
	//
	// ProtectionGroup is a required field
	ProtectionGroup *ProtectionGroup `type:"structure" required:"true"`
}

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

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

// SetProtectionGroup sets the ProtectionGroup field's value.
func (s *DescribeProtectionGroupOutput) SetProtectionGroup(v *ProtectionGroup) *DescribeProtectionGroupOutput {
	s.ProtectionGroup = v
	return s
}

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

	// The unique identifier (ID) for the Protection object that is described. When
	// submitting the DescribeProtection request you must provide either the ResourceArn
	// or the ProtectionID, but not both.
	ProtectionId *string `min:"1" type:"string"`

	// The ARN (Amazon Resource Name) of the AWS resource for the Protection object
	// that is described. When submitting the DescribeProtection request you must
	// provide either the ResourceArn or the ProtectionID, but not both.
	ResourceArn *string `min:"1" type:"string"`
}

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

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

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

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

// SetProtectionId sets the ProtectionId field's value.
func (s *DescribeProtectionInput) SetProtectionId(v string) *DescribeProtectionInput {
	s.ProtectionId = &v
	return s
}

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

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

	// The Protection object that is described.
	Protection *Protection `type:"structure"`
}

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

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

// SetProtection sets the Protection field's value.
func (s *DescribeProtectionOutput) SetProtection(v *Protection) *DescribeProtectionOutput {
	s.Protection = v
	return s
}

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

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

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

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

	// The AWS Shield Advanced subscription details for an account.
	Subscription *Subscription `type:"structure"`
}

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

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

// SetSubscription sets the Subscription field's value.
func (s *DescribeSubscriptionOutput) SetSubscription(v *Subscription) *DescribeSubscriptionOutput {
	s.Subscription = v
	return s
}

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

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

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

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

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

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

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

	// The Amazon S3 bucket that contains your AWS WAF logs.
	//
	// LogBucket is a required field
	LogBucket *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetLogBucket sets the LogBucket field's value.
func (s *DisassociateDRTLogBucketInput) SetLogBucket(v string) *DisassociateDRTLogBucketInput {
	s.LogBucket = &v
	return s
}

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

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

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

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

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

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

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

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

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

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

	// The Amazon Resource Name (ARN) of the health check that is associated with
	// the protection.
	//
	// HealthCheckArn is a required field
	HealthCheckArn *string `min:"1" type:"string" required:"true"`

	// The unique identifier (ID) for the Protection object to remove the health
	// check association from.
	//
	// ProtectionId is a required field
	ProtectionId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetHealthCheckArn sets the HealthCheckArn field's value.
func (s *DisassociateHealthCheckInput) SetHealthCheckArn(v string) *DisassociateHealthCheckInput {
	s.HealthCheckArn = &v
	return s
}

// SetProtectionId sets the ProtectionId field's value.
func (s *DisassociateHealthCheckInput) SetProtectionId(v string) *DisassociateHealthCheckInput {
	s.ProtectionId = &v
	return s
}

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

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

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

// Contact information that the DRT can use to contact you if you have proactive
// engagement enabled, for escalations to the DRT and to initiate proactive
// customer support.
type EmergencyContact struct {
	_ struct{} `type:"structure"`

	// Additional notes regarding the contact.
	ContactNotes *string `min:"1" type:"string"`

	// The email address for the contact.
	//
	// EmailAddress is a required field
	EmailAddress *string `min:"1" type:"string" required:"true"`

	// The phone number for the contact.
	PhoneNumber *string `min:"1" type:"string"`
}

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

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

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

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

// SetContactNotes sets the ContactNotes field's value.
func (s *EmergencyContact) SetContactNotes(v string) *EmergencyContact {
	s.ContactNotes = &v
	return s
}

// SetEmailAddress sets the EmailAddress field's value.
func (s *EmergencyContact) SetEmailAddress(v string) *EmergencyContact {
	s.EmailAddress = &v
	return s
}

// SetPhoneNumber sets the PhoneNumber field's value.
func (s *EmergencyContact) SetPhoneNumber(v string) *EmergencyContact {
	s.PhoneNumber = &v
	return s
}

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

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

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

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

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

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

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

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

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

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

	// The status of the subscription.
	//
	// SubscriptionState is a required field
	SubscriptionState *string `type:"string" required:"true" enum:"SubscriptionState"`
}

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

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

// SetSubscriptionState sets the SubscriptionState field's value.
func (s *GetSubscriptionStateOutput) SetSubscriptionState(v string) *GetSubscriptionStateOutput {
	s.SubscriptionState = &v
	return s
}

// Exception that indicates that a problem occurred with the service infrastructure.
// You can retry the request.
type InternalErrorException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorInternalErrorException(v protocol.ResponseMetadata) error {
	return &InternalErrorException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InternalErrorException) Code() string {
	return "InternalErrorException"
}

// Message returns the exception's message.
func (s *InternalErrorException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InternalErrorException) OrigErr() error {
	return nil
}

func (s *InternalErrorException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InternalErrorException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InternalErrorException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Exception that indicates that the operation would not cause any change to
// occur.
type InvalidOperationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorInvalidOperationException(v protocol.ResponseMetadata) error {
	return &InvalidOperationException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidOperationException) Code() string {
	return "InvalidOperationException"
}

// Message returns the exception's message.
func (s *InvalidOperationException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidOperationException) OrigErr() error {
	return nil
}

func (s *InvalidOperationException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InvalidOperationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidOperationException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Exception that indicates that the NextToken specified in the request is invalid.
// Submit the request using the NextToken value that was returned in the response.
type InvalidPaginationTokenException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorInvalidPaginationTokenException(v protocol.ResponseMetadata) error {
	return &InvalidPaginationTokenException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidPaginationTokenException) Code() string {
	return "InvalidPaginationTokenException"
}

// Message returns the exception's message.
func (s *InvalidPaginationTokenException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidPaginationTokenException) OrigErr() error {
	return nil
}

func (s *InvalidPaginationTokenException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InvalidPaginationTokenException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidPaginationTokenException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Exception that indicates that the parameters passed to the API are invalid.
// If available, this exception includes details in additional properties.
type InvalidParameterException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Fields that caused the exception.
	Fields []*ValidationExceptionField `locationName:"fields" type:"list"`

	Message_ *string `locationName:"message" type:"string"`

	// Additional information about the exception.
	Reason *string `locationName:"reason" type:"string" enum:"ValidationExceptionReason"`
}

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

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

func newErrorInvalidParameterException(v protocol.ResponseMetadata) error {
	return &InvalidParameterException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidParameterException) Code() string {
	return "InvalidParameterException"
}

// Message returns the exception's message.
func (s *InvalidParameterException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidParameterException) OrigErr() error {
	return nil
}

func (s *InvalidParameterException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InvalidParameterException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidParameterException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Exception that indicates that the resource is invalid. You might not have
// access to the resource, or the resource might not exist.
type InvalidResourceException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorInvalidResourceException(v protocol.ResponseMetadata) error {
	return &InvalidResourceException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidResourceException) Code() string {
	return "InvalidResourceException"
}

// Message returns the exception's message.
func (s *InvalidResourceException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidResourceException) OrigErr() error {
	return nil
}

func (s *InvalidResourceException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InvalidResourceException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidResourceException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Specifies how many protections of a given type you can create.
type Limit struct {
	_ struct{} `type:"structure"`

	// The maximum number of protections that can be created for the specified Type.
	Max *int64 `type:"long"`

	// The type of protection.
	Type *string `type:"string"`
}

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

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

// SetMax sets the Max field's value.
func (s *Limit) SetMax(v int64) *Limit {
	s.Max = &v
	return s
}

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

// Exception that indicates that the operation would exceed a limit.
//
// Type is the type of limit that would be exceeded.
//
// Limit is the threshold that would be exceeded.
type LimitsExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Limit *int64 `type:"long"`

	Message_ *string `locationName:"message" type:"string"`

	Type *string `type:"string"`
}

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

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

func newErrorLimitsExceededException(v protocol.ResponseMetadata) error {
	return &LimitsExceededException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *LimitsExceededException) Code() string {
	return "LimitsExceededException"
}

// Message returns the exception's message.
func (s *LimitsExceededException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *LimitsExceededException) OrigErr() error {
	return nil
}

func (s *LimitsExceededException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *LimitsExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *LimitsExceededException) RequestID() string {
	return s.RespMetadata.RequestID
}

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

	// The end of the time period for the attacks. This is a timestamp type. The
	// sample request above indicates a number type because the default used by
	// WAF is Unix time in seconds. However any valid timestamp format (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types)
	// is allowed.
	EndTime *TimeRange `type:"structure"`

	// The maximum number of AttackSummary objects to return. If you leave this
	// blank, Shield Advanced returns the first 20 results.
	//
	// This is a maximum value. Shield Advanced might return the results in smaller
	// batches. That is, the number of objects returned could be less than MaxResults,
	// even if there are still more objects yet to return. If there are more objects
	// to return, Shield Advanced returns a value in NextToken that you can use
	// in your next request, to get the next batch of objects.
	MaxResults *int64 `type:"integer"`

	// The ListAttacksRequest.NextMarker value from a previous call to ListAttacksRequest.
	// Pass null if this is the first call.
	NextToken *string `min:"1" type:"string"`

	// The ARN (Amazon Resource Name) of the resource that was attacked. If this
	// is left blank, all applicable resources for this account will be included.
	ResourceArns []*string `type:"list"`

	// The start of the time period for the attacks. This is a timestamp type. The
	// sample request above indicates a number type because the default used by
	// WAF is Unix time in seconds. However any valid timestamp format (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types)
	// is allowed.
	StartTime *TimeRange `type:"structure"`
}

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

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

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

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

// SetEndTime sets the EndTime field's value.
func (s *ListAttacksInput) SetEndTime(v *TimeRange) *ListAttacksInput {
	s.EndTime = v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAttacksInput) SetMaxResults(v int64) *ListAttacksInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAttacksInput) SetNextToken(v string) *ListAttacksInput {
	s.NextToken = &v
	return s
}

// SetResourceArns sets the ResourceArns field's value.
func (s *ListAttacksInput) SetResourceArns(v []*string) *ListAttacksInput {
	s.ResourceArns = v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListAttacksInput) SetStartTime(v *TimeRange) *ListAttacksInput {
	s.StartTime = v
	return s
}

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

	// The attack information for the specified time range.
	AttackSummaries []*AttackSummary `type:"list"`

	// The token returned by a previous call to indicate that there is more data
	// available. If not null, more results are available. Pass this value for the
	// NextMarker parameter in a subsequent call to ListAttacks to retrieve the
	// next set of items.
	//
	// Shield Advanced might return the list of AttackSummary objects in batches
	// smaller than the number specified by MaxResults. If there are more attack
	// summary objects to return, Shield Advanced will always also return a NextToken.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetAttackSummaries sets the AttackSummaries field's value.
func (s *ListAttacksOutput) SetAttackSummaries(v []*AttackSummary) *ListAttacksOutput {
	s.AttackSummaries = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAttacksOutput) SetNextToken(v string) *ListAttacksOutput {
	s.NextToken = &v
	return s
}

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

	// The maximum number of ProtectionGroup objects to return. If you leave this
	// blank, Shield Advanced returns the first 20 results.
	//
	// This is a maximum value. Shield Advanced might return the results in smaller
	// batches. That is, the number of objects returned could be less than MaxResults,
	// even if there are still more objects yet to return. If there are more objects
	// to return, Shield Advanced returns a value in NextToken that you can use
	// in your next request, to get the next batch of objects.
	MaxResults *int64 `type:"integer"`

	// The next token value from a previous call to ListProtectionGroups. Pass null
	// if this is the first call.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

// SetMaxResults sets the MaxResults field's value.
func (s *ListProtectionGroupsInput) SetMaxResults(v int64) *ListProtectionGroupsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListProtectionGroupsInput) SetNextToken(v string) *ListProtectionGroupsInput {
	s.NextToken = &v
	return s
}

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

	// If you specify a value for MaxResults and you have more protection groups
	// than the value of MaxResults, AWS Shield Advanced returns this token that
	// you can use in your next request, to get the next batch of objects.
	NextToken *string `min:"1" type:"string"`

	// ProtectionGroups is a required field
	ProtectionGroups []*ProtectionGroup `type:"list" required:"true"`
}

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

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

// SetNextToken sets the NextToken field's value.
func (s *ListProtectionGroupsOutput) SetNextToken(v string) *ListProtectionGroupsOutput {
	s.NextToken = &v
	return s
}

// SetProtectionGroups sets the ProtectionGroups field's value.
func (s *ListProtectionGroupsOutput) SetProtectionGroups(v []*ProtectionGroup) *ListProtectionGroupsOutput {
	s.ProtectionGroups = v
	return s
}

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

	// The maximum number of Protection objects to return. If you leave this blank,
	// Shield Advanced returns the first 20 results.
	//
	// This is a maximum value. Shield Advanced might return the results in smaller
	// batches. That is, the number of objects returned could be less than MaxResults,
	// even if there are still more objects yet to return. If there are more objects
	// to return, Shield Advanced returns a value in NextToken that you can use
	// in your next request, to get the next batch of objects.
	MaxResults *int64 `type:"integer"`

	// The ListProtectionsRequest.NextToken value from a previous call to ListProtections.
	// Pass null if this is the first call.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

// SetMaxResults sets the MaxResults field's value.
func (s *ListProtectionsInput) SetMaxResults(v int64) *ListProtectionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListProtectionsInput) SetNextToken(v string) *ListProtectionsInput {
	s.NextToken = &v
	return s
}

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

	// If you specify a value for MaxResults and you have more Protections than
	// the value of MaxResults, AWS Shield Advanced returns a NextToken value in
	// the response that allows you to list another group of Protections. For the
	// second and subsequent ListProtections requests, specify the value of NextToken
	// from the previous response to get information about another batch of Protections.
	//
	// Shield Advanced might return the list of Protection objects in batches smaller
	// than the number specified by MaxResults. If there are more Protection objects
	// to return, Shield Advanced will always also return a NextToken.
	NextToken *string `min:"1" type:"string"`

	// The array of enabled Protection objects.
	Protections []*Protection `type:"list"`
}

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

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

// SetNextToken sets the NextToken field's value.
func (s *ListProtectionsOutput) SetNextToken(v string) *ListProtectionsOutput {
	s.NextToken = &v
	return s
}

// SetProtections sets the Protections field's value.
func (s *ListProtectionsOutput) SetProtections(v []*Protection) *ListProtectionsOutput {
	s.Protections = v
	return s
}

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

	// The maximum number of resource ARN objects to return. If you leave this blank,
	// Shield Advanced returns the first 20 results.
	//
	// This is a maximum value. Shield Advanced might return the results in smaller
	// batches. That is, the number of objects returned could be less than MaxResults,
	// even if there are still more objects yet to return. If there are more objects
	// to return, Shield Advanced returns a value in NextToken that you can use
	// in your next request, to get the next batch of objects.
	MaxResults *int64 `type:"integer"`

	// The next token value from a previous call to ListResourcesInProtectionGroup.
	// Pass null if this is the first call.
	NextToken *string `min:"1" type:"string"`

	// The name of the protection group. You use this to identify the protection
	// group in lists and to manage the protection group, for example to update,
	// delete, or describe it.
	//
	// ProtectionGroupId is a required field
	ProtectionGroupId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetMaxResults sets the MaxResults field's value.
func (s *ListResourcesInProtectionGroupInput) SetMaxResults(v int64) *ListResourcesInProtectionGroupInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListResourcesInProtectionGroupInput) SetNextToken(v string) *ListResourcesInProtectionGroupInput {
	s.NextToken = &v
	return s
}

// SetProtectionGroupId sets the ProtectionGroupId field's value.
func (s *ListResourcesInProtectionGroupInput) SetProtectionGroupId(v string) *ListResourcesInProtectionGroupInput {
	s.ProtectionGroupId = &v
	return s
}

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

	// If you specify a value for MaxResults and you have more resources in the
	// protection group than the value of MaxResults, AWS Shield Advanced returns
	// this token that you can use in your next request, to get the next batch of
	// objects.
	NextToken *string `min:"1" type:"string"`

	// The Amazon Resource Names (ARNs) of the resources that are included in the
	// protection group.
	//
	// ResourceArns is a required field
	ResourceArns []*string `type:"list" required:"true"`
}

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

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

// SetNextToken sets the NextToken field's value.
func (s *ListResourcesInProtectionGroupOutput) SetNextToken(v string) *ListResourcesInProtectionGroupOutput {
	s.NextToken = &v
	return s
}

// SetResourceArns sets the ResourceArns field's value.
func (s *ListResourcesInProtectionGroupOutput) SetResourceArns(v []*string) *ListResourcesInProtectionGroupOutput {
	s.ResourceArns = v
	return s
}

// You are trying to update a subscription that has not yet completed the 1-year
// commitment. You can change the AutoRenew parameter during the last 30 days
// of your subscription. This exception indicates that you are attempting to
// change AutoRenew prior to that period.
type LockedSubscriptionException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorLockedSubscriptionException(v protocol.ResponseMetadata) error {
	return &LockedSubscriptionException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *LockedSubscriptionException) Code() string {
	return "LockedSubscriptionException"
}

// Message returns the exception's message.
func (s *LockedSubscriptionException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *LockedSubscriptionException) OrigErr() error {
	return nil
}

func (s *LockedSubscriptionException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *LockedSubscriptionException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *LockedSubscriptionException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The mitigation applied to a DDoS attack.
type Mitigation struct {
	_ struct{} `type:"structure"`

	// The name of the mitigation taken for this attack.
	MitigationName *string `type:"string"`
}

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

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

// SetMitigationName sets the MitigationName field's value.
func (s *Mitigation) SetMitigationName(v string) *Mitigation {
	s.MitigationName = &v
	return s
}

// The ARN of the role that you specifed does not exist.
type NoAssociatedRoleException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorNoAssociatedRoleException(v protocol.ResponseMetadata) error {
	return &NoAssociatedRoleException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *NoAssociatedRoleException) Code() string {
	return "NoAssociatedRoleException"
}

// Message returns the exception's message.
func (s *NoAssociatedRoleException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *NoAssociatedRoleException) OrigErr() error {
	return nil
}

func (s *NoAssociatedRoleException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *NoAssociatedRoleException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *NoAssociatedRoleException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Exception that indicates that the resource state has been modified by another
// client. Retrieve the resource and then retry your request.
type OptimisticLockException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorOptimisticLockException(v protocol.ResponseMetadata) error {
	return &OptimisticLockException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *OptimisticLockException) Code() string {
	return "OptimisticLockException"
}

// Message returns the exception's message.
func (s *OptimisticLockException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *OptimisticLockException) OrigErr() error {
	return nil
}

func (s *OptimisticLockException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *OptimisticLockException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *OptimisticLockException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An object that represents a resource that is under DDoS protection.
type Protection struct {
	_ struct{} `type:"structure"`

	// The unique identifier (ID) for the Route 53 health check that's associated
	// with the protection.
	HealthCheckIds []*string `type:"list"`

	// The unique identifier (ID) of the protection.
	Id *string `min:"1" type:"string"`

	// The name of the protection. For example, My CloudFront distributions.
	Name *string `min:"1" type:"string"`

	// The ARN (Amazon Resource Name) of the AWS resource that is protected.
	ResourceArn *string `min:"1" type:"string"`
}

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

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

// SetHealthCheckIds sets the HealthCheckIds field's value.
func (s *Protection) SetHealthCheckIds(v []*string) *Protection {
	s.HealthCheckIds = v
	return s
}

// SetId sets the Id field's value.
func (s *Protection) SetId(v string) *Protection {
	s.Id = &v
	return s
}

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

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

// A grouping of protected resources that you and AWS Shield Advanced can monitor
// as a collective. This resource grouping improves the accuracy of detection
// and reduces false positives.
type ProtectionGroup struct {
	_ struct{} `type:"structure"`

	// Defines how AWS Shield combines resource data for the group in order to detect,
	// mitigate, and report events.
	//
	//    * Sum - Use the total traffic across the group. This is a good choice
	//    for most cases. Examples include Elastic IP addresses for EC2 instances
	//    that scale manually or automatically.
	//
	//    * Mean - Use the average of the traffic across the group. This is a good
	//    choice for resources that share traffic uniformly. Examples include accelerators
	//    and load balancers.
	//
	//    * Max - Use the highest traffic from each resource. This is useful for
	//    resources that don't share traffic and for resources that share that traffic
	//    in a non-uniform way. Examples include CloudFront distributions and origin
	//    resources for CloudFront distributions.
	//
	// Aggregation is a required field
	Aggregation *string `type:"string" required:"true" enum:"ProtectionGroupAggregation"`

	// The Amazon Resource Names (ARNs) of the resources to include in the protection
	// group. You must set this when you set Pattern to ARBITRARY and you must not
	// set it for any other Pattern setting.
	//
	// Members is a required field
	Members []*string `type:"list" required:"true"`

	// The criteria to use to choose the protected resources for inclusion in the
	// group. You can include all resources that have protections, provide a list
	// of resource Amazon Resource Names (ARNs), or include all resources of a specified
	// resource type.
	//
	// Pattern is a required field
	Pattern *string `type:"string" required:"true" enum:"ProtectionGroupPattern"`

	// The name of the protection group. You use this to identify the protection
	// group in lists and to manage the protection group, for example to update,
	// delete, or describe it.
	//
	// ProtectionGroupId is a required field
	ProtectionGroupId *string `min:"1" type:"string" required:"true"`

	// The resource type to include in the protection group. All protected resources
	// of this type are included in the protection group. You must set this when
	// you set Pattern to BY_RESOURCE_TYPE and you must not set it for any other
	// Pattern setting.
	ResourceType *string `type:"string" enum:"ProtectedResourceType"`
}

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

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

// SetAggregation sets the Aggregation field's value.
func (s *ProtectionGroup) SetAggregation(v string) *ProtectionGroup {
	s.Aggregation = &v
	return s
}

// SetMembers sets the Members field's value.
func (s *ProtectionGroup) SetMembers(v []*string) *ProtectionGroup {
	s.Members = v
	return s
}

// SetPattern sets the Pattern field's value.
func (s *ProtectionGroup) SetPattern(v string) *ProtectionGroup {
	s.Pattern = &v
	return s
}

// SetProtectionGroupId sets the ProtectionGroupId field's value.
func (s *ProtectionGroup) SetProtectionGroupId(v string) *ProtectionGroup {
	s.ProtectionGroupId = &v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *ProtectionGroup) SetResourceType(v string) *ProtectionGroup {
	s.ResourceType = &v
	return s
}

// Limits settings on protection groups with arbitrary pattern type.
type ProtectionGroupArbitraryPatternLimits struct {
	_ struct{} `type:"structure"`

	// The maximum number of resources you can specify for a single arbitrary pattern
	// in a protection group.
	//
	// MaxMembers is a required field
	MaxMembers *int64 `type:"long" required:"true"`
}

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

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

// SetMaxMembers sets the MaxMembers field's value.
func (s *ProtectionGroupArbitraryPatternLimits) SetMaxMembers(v int64) *ProtectionGroupArbitraryPatternLimits {
	s.MaxMembers = &v
	return s
}

// Limits settings on protection groups for your subscription.
type ProtectionGroupLimits struct {
	_ struct{} `type:"structure"`

	// The maximum number of protection groups that you can have at one time.
	//
	// MaxProtectionGroups is a required field
	MaxProtectionGroups *int64 `type:"long" required:"true"`

	// Limits settings by pattern type in the protection groups for your subscription.
	//
	// PatternTypeLimits is a required field
	PatternTypeLimits *ProtectionGroupPatternTypeLimits `type:"structure" required:"true"`
}

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

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

// SetMaxProtectionGroups sets the MaxProtectionGroups field's value.
func (s *ProtectionGroupLimits) SetMaxProtectionGroups(v int64) *ProtectionGroupLimits {
	s.MaxProtectionGroups = &v
	return s
}

// SetPatternTypeLimits sets the PatternTypeLimits field's value.
func (s *ProtectionGroupLimits) SetPatternTypeLimits(v *ProtectionGroupPatternTypeLimits) *ProtectionGroupLimits {
	s.PatternTypeLimits = v
	return s
}

// Limits settings by pattern type in the protection groups for your subscription.
type ProtectionGroupPatternTypeLimits struct {
	_ struct{} `type:"structure"`

	// Limits settings on protection groups with arbitrary pattern type.
	//
	// ArbitraryPatternLimits is a required field
	ArbitraryPatternLimits *ProtectionGroupArbitraryPatternLimits `type:"structure" required:"true"`
}

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

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

// SetArbitraryPatternLimits sets the ArbitraryPatternLimits field's value.
func (s *ProtectionGroupPatternTypeLimits) SetArbitraryPatternLimits(v *ProtectionGroupArbitraryPatternLimits) *ProtectionGroupPatternTypeLimits {
	s.ArbitraryPatternLimits = v
	return s
}

// Limits settings on protections for your subscription.
type ProtectionLimits struct {
	_ struct{} `type:"structure"`

	// The maximum number of resource types that you can specify in a protection.
	//
	// ProtectedResourceTypeLimits is a required field
	ProtectedResourceTypeLimits []*Limit `type:"list" required:"true"`
}

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

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

// SetProtectedResourceTypeLimits sets the ProtectedResourceTypeLimits field's value.
func (s *ProtectionLimits) SetProtectedResourceTypeLimits(v []*Limit) *ProtectionLimits {
	s.ProtectedResourceTypeLimits = v
	return s
}

// Exception indicating the specified resource already exists. If available,
// this exception includes details in additional properties.
type ResourceAlreadyExistsException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`

	// The type of resource that already exists.
	ResourceType *string `locationName:"resourceType" type:"string"`
}

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

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

func newErrorResourceAlreadyExistsException(v protocol.ResponseMetadata) error {
	return &ResourceAlreadyExistsException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ResourceAlreadyExistsException) Code() string {
	return "ResourceAlreadyExistsException"
}

// Message returns the exception's message.
func (s *ResourceAlreadyExistsException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ResourceAlreadyExistsException) OrigErr() error {
	return nil
}

func (s *ResourceAlreadyExistsException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ResourceAlreadyExistsException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceAlreadyExistsException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Exception indicating the specified resource does not exist. If available,
// this exception includes details in additional properties.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`

	// Type of resource.
	ResourceType *string `locationName:"resourceType" type:"string"`
}

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

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

func newErrorResourceNotFoundException(v protocol.ResponseMetadata) error {
	return &ResourceNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ResourceNotFoundException) Code() string {
	return "ResourceNotFoundException"
}

// Message returns the exception's message.
func (s *ResourceNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ResourceNotFoundException) OrigErr() error {
	return nil
}

func (s *ResourceNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ResourceNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The attack information for the specified SubResource.
type SubResourceSummary struct {
	_ struct{} `type:"structure"`

	// The list of attack types and associated counters.
	AttackVectors []*SummarizedAttackVector `type:"list"`

	// The counters that describe the details of the attack.
	Counters []*SummarizedCounter `type:"list"`

	// The unique identifier (ID) of the SubResource.
	Id *string `type:"string"`

	// The SubResource type.
	Type *string `type:"string" enum:"SubResourceType"`
}

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

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

// SetAttackVectors sets the AttackVectors field's value.
func (s *SubResourceSummary) SetAttackVectors(v []*SummarizedAttackVector) *SubResourceSummary {
	s.AttackVectors = v
	return s
}

// SetCounters sets the Counters field's value.
func (s *SubResourceSummary) SetCounters(v []*SummarizedCounter) *SubResourceSummary {
	s.Counters = v
	return s
}

// SetId sets the Id field's value.
func (s *SubResourceSummary) SetId(v string) *SubResourceSummary {
	s.Id = &v
	return s
}

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

// Information about the AWS Shield Advanced subscription for an account.
type Subscription struct {
	_ struct{} `type:"structure"`

	// If ENABLED, the subscription will be automatically renewed at the end of
	// the existing subscription period.
	//
	// When you initally create a subscription, AutoRenew is set to ENABLED. You
	// can change this by submitting an UpdateSubscription request. If the UpdateSubscription
	// request does not included a value for AutoRenew, the existing value for AutoRenew
	// remains unchanged.
	AutoRenew *string `type:"string" enum:"AutoRenew"`

	// The date and time your subscription will end.
	EndTime *time.Time `type:"timestamp"`

	// Specifies how many protections of a given type you can create.
	Limits []*Limit `type:"list"`

	// If ENABLED, the DDoS Response Team (DRT) will use email and phone to notify
	// contacts about escalations to the DRT and to initiate proactive customer
	// support.
	//
	// If PENDING, you have requested proactive engagement and the request is pending.
	// The status changes to ENABLED when your request is fully processed.
	//
	// If DISABLED, the DRT will not proactively notify contacts about escalations
	// or to initiate proactive customer support.
	ProactiveEngagementStatus *string `type:"string" enum:"ProactiveEngagementStatus"`

	// The start time of the subscription, in Unix time in seconds. For more information
	// see timestamp (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	StartTime *time.Time `type:"timestamp"`

	// Limits settings for your subscription.
	//
	// SubscriptionLimits is a required field
	SubscriptionLimits *SubscriptionLimits `type:"structure" required:"true"`

	// The length, in seconds, of the AWS Shield Advanced subscription for the account.
	TimeCommitmentInSeconds *int64 `type:"long"`
}

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

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

// SetAutoRenew sets the AutoRenew field's value.
func (s *Subscription) SetAutoRenew(v string) *Subscription {
	s.AutoRenew = &v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *Subscription) SetEndTime(v time.Time) *Subscription {
	s.EndTime = &v
	return s
}

// SetLimits sets the Limits field's value.
func (s *Subscription) SetLimits(v []*Limit) *Subscription {
	s.Limits = v
	return s
}

// SetProactiveEngagementStatus sets the ProactiveEngagementStatus field's value.
func (s *Subscription) SetProactiveEngagementStatus(v string) *Subscription {
	s.ProactiveEngagementStatus = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *Subscription) SetStartTime(v time.Time) *Subscription {
	s.StartTime = &v
	return s
}

// SetSubscriptionLimits sets the SubscriptionLimits field's value.
func (s *Subscription) SetSubscriptionLimits(v *SubscriptionLimits) *Subscription {
	s.SubscriptionLimits = v
	return s
}

// SetTimeCommitmentInSeconds sets the TimeCommitmentInSeconds field's value.
func (s *Subscription) SetTimeCommitmentInSeconds(v int64) *Subscription {
	s.TimeCommitmentInSeconds = &v
	return s
}

// Limits settings for your subscription.
type SubscriptionLimits struct {
	_ struct{} `type:"structure"`

	// Limits settings on protection groups for your subscription.
	//
	// ProtectionGroupLimits is a required field
	ProtectionGroupLimits *ProtectionGroupLimits `type:"structure" required:"true"`

	// Limits settings on protections for your subscription.
	//
	// ProtectionLimits is a required field
	ProtectionLimits *ProtectionLimits `type:"structure" required:"true"`
}

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

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

// SetProtectionGroupLimits sets the ProtectionGroupLimits field's value.
func (s *SubscriptionLimits) SetProtectionGroupLimits(v *ProtectionGroupLimits) *SubscriptionLimits {
	s.ProtectionGroupLimits = v
	return s
}

// SetProtectionLimits sets the ProtectionLimits field's value.
func (s *SubscriptionLimits) SetProtectionLimits(v *ProtectionLimits) *SubscriptionLimits {
	s.ProtectionLimits = v
	return s
}

// A summary of information about the attack.
type SummarizedAttackVector struct {
	_ struct{} `type:"structure"`

	// The list of counters that describe the details of the attack.
	VectorCounters []*SummarizedCounter `type:"list"`

	// The attack type, for example, SNMP reflection or SYN flood.
	//
	// VectorType is a required field
	VectorType *string `type:"string" required:"true"`
}

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

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

// SetVectorCounters sets the VectorCounters field's value.
func (s *SummarizedAttackVector) SetVectorCounters(v []*SummarizedCounter) *SummarizedAttackVector {
	s.VectorCounters = v
	return s
}

// SetVectorType sets the VectorType field's value.
func (s *SummarizedAttackVector) SetVectorType(v string) *SummarizedAttackVector {
	s.VectorType = &v
	return s
}

// The counter that describes a DDoS attack.
type SummarizedCounter struct {
	_ struct{} `type:"structure"`

	// The average value of the counter for a specified time period.
	Average *float64 `type:"double"`

	// The maximum value of the counter for a specified time period.
	Max *float64 `type:"double"`

	// The number of counters for a specified time period.
	N *int64 `type:"integer"`

	// The counter name.
	Name *string `type:"string"`

	// The total of counter values for a specified time period.
	Sum *float64 `type:"double"`

	// The unit of the counters.
	Unit *string `type:"string"`
}

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

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

// SetAverage sets the Average field's value.
func (s *SummarizedCounter) SetAverage(v float64) *SummarizedCounter {
	s.Average = &v
	return s
}

// SetMax sets the Max field's value.
func (s *SummarizedCounter) SetMax(v float64) *SummarizedCounter {
	s.Max = &v
	return s
}

// SetN sets the N field's value.
func (s *SummarizedCounter) SetN(v int64) *SummarizedCounter {
	s.N = &v
	return s
}

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

// SetSum sets the Sum field's value.
func (s *SummarizedCounter) SetSum(v float64) *SummarizedCounter {
	s.Sum = &v
	return s
}

// SetUnit sets the Unit field's value.
func (s *SummarizedCounter) SetUnit(v string) *SummarizedCounter {
	s.Unit = &v
	return s
}

// The time range.
type TimeRange struct {
	_ struct{} `type:"structure"`

	// The start time, in Unix time in seconds. For more information see timestamp
	// (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	FromInclusive *time.Time `type:"timestamp"`

	// The end time, in Unix time in seconds. For more information see timestamp
	// (http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#parameter-types).
	ToExclusive *time.Time `type:"timestamp"`
}

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

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

// SetFromInclusive sets the FromInclusive field's value.
func (s *TimeRange) SetFromInclusive(v time.Time) *TimeRange {
	s.FromInclusive = &v
	return s
}

// SetToExclusive sets the ToExclusive field's value.
func (s *TimeRange) SetToExclusive(v time.Time) *TimeRange {
	s.ToExclusive = &v
	return s
}

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

	// A list of email addresses and phone numbers that the DDoS Response Team (DRT)
	// can use to contact you if you have proactive engagement enabled, for escalations
	// to the DRT and to initiate proactive customer support.
	//
	// If you have proactive engagement enabled, the contact list must include at
	// least one phone number.
	EmergencyContactList []*EmergencyContact `type:"list"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateEmergencyContactSettingsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateEmergencyContactSettingsInput"}
	if s.EmergencyContactList != nil {
		for i, v := range s.EmergencyContactList {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "EmergencyContactList", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetEmergencyContactList sets the EmergencyContactList field's value.
func (s *UpdateEmergencyContactSettingsInput) SetEmergencyContactList(v []*EmergencyContact) *UpdateEmergencyContactSettingsInput {
	s.EmergencyContactList = v
	return s
}

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

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

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

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

	// Defines how AWS Shield combines resource data for the group in order to detect,
	// mitigate, and report events.
	//
	//    * Sum - Use the total traffic across the group. This is a good choice
	//    for most cases. Examples include Elastic IP addresses for EC2 instances
	//    that scale manually or automatically.
	//
	//    * Mean - Use the average of the traffic across the group. This is a good
	//    choice for resources that share traffic uniformly. Examples include accelerators
	//    and load balancers.
	//
	//    * Max - Use the highest traffic from each resource. This is useful for
	//    resources that don't share traffic and for resources that share that traffic
	//    in a non-uniform way. Examples include CloudFront distributions and origin
	//    resources for CloudFront distributions.
	//
	// Aggregation is a required field
	Aggregation *string `type:"string" required:"true" enum:"ProtectionGroupAggregation"`

	// The Amazon Resource Names (ARNs) of the resources to include in the protection
	// group. You must set this when you set Pattern to ARBITRARY and you must not
	// set it for any other Pattern setting.
	Members []*string `type:"list"`

	// The criteria to use to choose the protected resources for inclusion in the
	// group. You can include all resources that have protections, provide a list
	// of resource Amazon Resource Names (ARNs), or include all resources of a specified
	// resource type.
	//
	// Pattern is a required field
	Pattern *string `type:"string" required:"true" enum:"ProtectionGroupPattern"`

	// The name of the protection group. You use this to identify the protection
	// group in lists and to manage the protection group, for example to update,
	// delete, or describe it.
	//
	// ProtectionGroupId is a required field
	ProtectionGroupId *string `min:"1" type:"string" required:"true"`

	// The resource type to include in the protection group. All protected resources
	// of this type are included in the protection group. You must set this when
	// you set Pattern to BY_RESOURCE_TYPE and you must not set it for any other
	// Pattern setting.
	ResourceType *string `type:"string" enum:"ProtectedResourceType"`
}

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

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

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

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

// SetAggregation sets the Aggregation field's value.
func (s *UpdateProtectionGroupInput) SetAggregation(v string) *UpdateProtectionGroupInput {
	s.Aggregation = &v
	return s
}

// SetMembers sets the Members field's value.
func (s *UpdateProtectionGroupInput) SetMembers(v []*string) *UpdateProtectionGroupInput {
	s.Members = v
	return s
}

// SetPattern sets the Pattern field's value.
func (s *UpdateProtectionGroupInput) SetPattern(v string) *UpdateProtectionGroupInput {
	s.Pattern = &v
	return s
}

// SetProtectionGroupId sets the ProtectionGroupId field's value.
func (s *UpdateProtectionGroupInput) SetProtectionGroupId(v string) *UpdateProtectionGroupInput {
	s.ProtectionGroupId = &v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *UpdateProtectionGroupInput) SetResourceType(v string) *UpdateProtectionGroupInput {
	s.ResourceType = &v
	return s
}

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

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

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

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

	// When you initally create a subscription, AutoRenew is set to ENABLED. If
	// ENABLED, the subscription will be automatically renewed at the end of the
	// existing subscription period. You can change this by submitting an UpdateSubscription
	// request. If the UpdateSubscription request does not included a value for
	// AutoRenew, the existing value for AutoRenew remains unchanged.
	AutoRenew *string `type:"string" enum:"AutoRenew"`
}

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

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

// SetAutoRenew sets the AutoRenew field's value.
func (s *UpdateSubscriptionInput) SetAutoRenew(v string) *UpdateSubscriptionInput {
	s.AutoRenew = &v
	return s
}

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

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

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

// Provides information about a particular parameter passed inside a request
// that resulted in an exception.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

	// The message describing why the parameter failed validation.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`

	// The name of the parameter that failed validation.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

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

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

// SetMessage sets the Message field's value.
func (s *ValidationExceptionField) SetMessage(v string) *ValidationExceptionField {
	s.Message = &v
	return s
}

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

const (
	// AttackLayerNetwork is a AttackLayer enum value
	AttackLayerNetwork = "NETWORK"

	// AttackLayerApplication is a AttackLayer enum value
	AttackLayerApplication = "APPLICATION"
)

// AttackLayer_Values returns all elements of the AttackLayer enum
func AttackLayer_Values() []string {
	return []string{
		AttackLayerNetwork,
		AttackLayerApplication,
	}
}

const (
	// AttackPropertyIdentifierDestinationUrl is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierDestinationUrl = "DESTINATION_URL"

	// AttackPropertyIdentifierReferrer is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierReferrer = "REFERRER"

	// AttackPropertyIdentifierSourceAsn is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierSourceAsn = "SOURCE_ASN"

	// AttackPropertyIdentifierSourceCountry is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierSourceCountry = "SOURCE_COUNTRY"

	// AttackPropertyIdentifierSourceIpAddress is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierSourceIpAddress = "SOURCE_IP_ADDRESS"

	// AttackPropertyIdentifierSourceUserAgent is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierSourceUserAgent = "SOURCE_USER_AGENT"

	// AttackPropertyIdentifierWordpressPingbackReflector is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierWordpressPingbackReflector = "WORDPRESS_PINGBACK_REFLECTOR"

	// AttackPropertyIdentifierWordpressPingbackSource is a AttackPropertyIdentifier enum value
	AttackPropertyIdentifierWordpressPingbackSource = "WORDPRESS_PINGBACK_SOURCE"
)

// AttackPropertyIdentifier_Values returns all elements of the AttackPropertyIdentifier enum
func AttackPropertyIdentifier_Values() []string {
	return []string{
		AttackPropertyIdentifierDestinationUrl,
		AttackPropertyIdentifierReferrer,
		AttackPropertyIdentifierSourceAsn,
		AttackPropertyIdentifierSourceCountry,
		AttackPropertyIdentifierSourceIpAddress,
		AttackPropertyIdentifierSourceUserAgent,
		AttackPropertyIdentifierWordpressPingbackReflector,
		AttackPropertyIdentifierWordpressPingbackSource,
	}
}

const (
	// AutoRenewEnabled is a AutoRenew enum value
	AutoRenewEnabled = "ENABLED"

	// AutoRenewDisabled is a AutoRenew enum value
	AutoRenewDisabled = "DISABLED"
)

// AutoRenew_Values returns all elements of the AutoRenew enum
func AutoRenew_Values() []string {
	return []string{
		AutoRenewEnabled,
		AutoRenewDisabled,
	}
}

const (
	// ProactiveEngagementStatusEnabled is a ProactiveEngagementStatus enum value
	ProactiveEngagementStatusEnabled = "ENABLED"

	// ProactiveEngagementStatusDisabled is a ProactiveEngagementStatus enum value
	ProactiveEngagementStatusDisabled = "DISABLED"

	// ProactiveEngagementStatusPending is a ProactiveEngagementStatus enum value
	ProactiveEngagementStatusPending = "PENDING"
)

// ProactiveEngagementStatus_Values returns all elements of the ProactiveEngagementStatus enum
func ProactiveEngagementStatus_Values() []string {
	return []string{
		ProactiveEngagementStatusEnabled,
		ProactiveEngagementStatusDisabled,
		ProactiveEngagementStatusPending,
	}
}

const (
	// ProtectedResourceTypeCloudfrontDistribution is a ProtectedResourceType enum value
	ProtectedResourceTypeCloudfrontDistribution = "CLOUDFRONT_DISTRIBUTION"

	// ProtectedResourceTypeRoute53HostedZone is a ProtectedResourceType enum value
	ProtectedResourceTypeRoute53HostedZone = "ROUTE_53_HOSTED_ZONE"

	// ProtectedResourceTypeElasticIpAllocation is a ProtectedResourceType enum value
	ProtectedResourceTypeElasticIpAllocation = "ELASTIC_IP_ALLOCATION"

	// ProtectedResourceTypeClassicLoadBalancer is a ProtectedResourceType enum value
	ProtectedResourceTypeClassicLoadBalancer = "CLASSIC_LOAD_BALANCER"

	// ProtectedResourceTypeApplicationLoadBalancer is a ProtectedResourceType enum value
	ProtectedResourceTypeApplicationLoadBalancer = "APPLICATION_LOAD_BALANCER"

	// ProtectedResourceTypeGlobalAccelerator is a ProtectedResourceType enum value
	ProtectedResourceTypeGlobalAccelerator = "GLOBAL_ACCELERATOR"
)

// ProtectedResourceType_Values returns all elements of the ProtectedResourceType enum
func ProtectedResourceType_Values() []string {
	return []string{
		ProtectedResourceTypeCloudfrontDistribution,
		ProtectedResourceTypeRoute53HostedZone,
		ProtectedResourceTypeElasticIpAllocation,
		ProtectedResourceTypeClassicLoadBalancer,
		ProtectedResourceTypeApplicationLoadBalancer,
		ProtectedResourceTypeGlobalAccelerator,
	}
}

const (
	// ProtectionGroupAggregationSum is a ProtectionGroupAggregation enum value
	ProtectionGroupAggregationSum = "SUM"

	// ProtectionGroupAggregationMean is a ProtectionGroupAggregation enum value
	ProtectionGroupAggregationMean = "MEAN"

	// ProtectionGroupAggregationMax is a ProtectionGroupAggregation enum value
	ProtectionGroupAggregationMax = "MAX"
)

// ProtectionGroupAggregation_Values returns all elements of the ProtectionGroupAggregation enum
func ProtectionGroupAggregation_Values() []string {
	return []string{
		ProtectionGroupAggregationSum,
		ProtectionGroupAggregationMean,
		ProtectionGroupAggregationMax,
	}
}

const (
	// ProtectionGroupPatternAll is a ProtectionGroupPattern enum value
	ProtectionGroupPatternAll = "ALL"

	// ProtectionGroupPatternArbitrary is a ProtectionGroupPattern enum value
	ProtectionGroupPatternArbitrary = "ARBITRARY"

	// ProtectionGroupPatternByResourceType is a ProtectionGroupPattern enum value
	ProtectionGroupPatternByResourceType = "BY_RESOURCE_TYPE"
)

// ProtectionGroupPattern_Values returns all elements of the ProtectionGroupPattern enum
func ProtectionGroupPattern_Values() []string {
	return []string{
		ProtectionGroupPatternAll,
		ProtectionGroupPatternArbitrary,
		ProtectionGroupPatternByResourceType,
	}
}

const (
	// SubResourceTypeIp is a SubResourceType enum value
	SubResourceTypeIp = "IP"

	// SubResourceTypeUrl is a SubResourceType enum value
	SubResourceTypeUrl = "URL"
)

// SubResourceType_Values returns all elements of the SubResourceType enum
func SubResourceType_Values() []string {
	return []string{
		SubResourceTypeIp,
		SubResourceTypeUrl,
	}
}

const (
	// SubscriptionStateActive is a SubscriptionState enum value
	SubscriptionStateActive = "ACTIVE"

	// SubscriptionStateInactive is a SubscriptionState enum value
	SubscriptionStateInactive = "INACTIVE"
)

// SubscriptionState_Values returns all elements of the SubscriptionState enum
func SubscriptionState_Values() []string {
	return []string{
		SubscriptionStateActive,
		SubscriptionStateInactive,
	}
}

const (
	// UnitBits is a Unit enum value
	UnitBits = "BITS"

	// UnitBytes is a Unit enum value
	UnitBytes = "BYTES"

	// UnitPackets is a Unit enum value
	UnitPackets = "PACKETS"

	// UnitRequests is a Unit enum value
	UnitRequests = "REQUESTS"
)

// Unit_Values returns all elements of the Unit enum
func Unit_Values() []string {
	return []string{
		UnitBits,
		UnitBytes,
		UnitPackets,
		UnitRequests,
	}
}

const (
	// ValidationExceptionReasonFieldValidationFailed is a ValidationExceptionReason enum value
	ValidationExceptionReasonFieldValidationFailed = "FIELD_VALIDATION_FAILED"

	// ValidationExceptionReasonOther is a ValidationExceptionReason enum value
	ValidationExceptionReasonOther = "OTHER"
)

// ValidationExceptionReason_Values returns all elements of the ValidationExceptionReason enum
func ValidationExceptionReason_Values() []string {
	return []string{
		ValidationExceptionReasonFieldValidationFailed,
		ValidationExceptionReasonOther,
	}
}
